回 帖 发 新 帖 刷新版面

主题:求关于单纯形方面的程序!!

求关于单纯形方面的程序!!小弟跪谢[em2]

回复列表 (共2个回复)

沙发


以前用VB做过一个:
[url=http://blog.programfan.com/article.asp?id=25296]HERE[/url]

板凳

[转]
这是这几天来看线性规划的成果,程序比较粗糙,欢迎大家给出意见。

另外:此程序是我的原创,欢迎大家复制拷贝,无任何版权问题,但请在使用后说明出处,谢谢。

例:max  2*x1+3*x2

s.t.  x1+2*x2<=8

     4*x1<=16

     4*x2<=12

   x1,x2>=0

加入松驰变量,化为标准型,得到

A=[1 2 1 0 0 8;4 0 0 1 0 16;0 4 0 0 1 12;2 3 0 0 0 0];

N=[3 4 5];

然后执行  [sol,val,kk]=ssimplex(A,N)就可以了。

注:基变量对应的基矩阵一定是单位阵。(这一局限将在后面的升级是改善)

%  求解标准型线性规划:max c*x;s.t. A*x=b;x>=0
%  本函数中的A是单纯初始表,包括:最后一行是初始的检验数,最后一列是资源向量b
%  N是初始的基变量的下标

%输出变量sol是最优解

%输出变量val是最优值,kk是迭代次数
function [sol,val,kk]=ssimplex(A,N)
[mA,nA]=size(A);
kk=0;     %  迭代次数
flag=1;
while flag
    kk=kk+1;
    if A(mA,:)<=0      %  已找到最优解
        flag=0;
        sol=zeros(1,nA-1);
        for i=1:mA-1
            sol(N(i))=A(i,nA);
        end
        val=-A(mA,nA);
    else
        for i=1:nA-1
            if A(mA,i)>0&A(1:mA-1,i)<=0    %  问题有无界解
                disp('have infinite solution!');
                flag=0;
                break;
            end
        end
        if flag        %    还不是最优表,进行转轴运算
            temp=0;
            for i=1:nA-1
                if A(mA,i)>temp
                    temp=A(mA,i);
                    inb=i;   %   进基变量的下标
                end
            end
            sita=zeros(1,mA-1);
            for i=1:mA-1
                if A(i,inb)>0
                    sita(i)=A(i,nA)/A(i,inb);
                end
            end
            temp=inf;
            for i=1:mA-1
                if sita(i)>0&sita(i)<temp
                    temp=sita(i);
                    outb=i;   %  出基变量下标
                end
            end
            %  以下更新N
            for i=1:mA-1
                if i==outb
                    N(i)=inb;
                end
            end
            %  以下进行转轴运算
            A(outb,:)=A(outb,:)/A(outb,inb);
            for i=1:mA
                if i~=outb
                    A(i,:)=A(i,:)-A(outb,:)*A(i,inb);
                end
            end
        end
    end
end

我来回复

您尚未登录,请登录后再回复。点此登录或注册