min z=cx
s.t. A1x<=b1 A2x=b2 v1<=x<=v2
然后利用指令[x,fv,ef,out,lambda]=linprog(c,A1,b1,A2,b2,v1,v2,x0,opt)
即可。不需要设置的部分可以省略。
针对你的问题,对应标准型的矩阵设置为:
z=-[2 5 0 0 0]
%A1和b1不需要设置
A2=[1 0 1 0 02 0 0 1 03 2 0 0 1]
b2=[4 12 18]
v1=[0 0 0 0 0]
%v2设置的大一点就行
v2=[1e10 1e10 1e10 1e10 1e10]
取初值,比如x0=[0 0 0 0 0]
然后[x,fv,ef,out,lambda]=linprog(c,[],[],A2,b2,v1,v2,x0,[])
就行了。
我临时编的,没编译,有问题直接告诉我就行。。。
有两个问题,第一个,你的问题里要求最大值,但是标准型是求取最小值,所以把c向量取你题中的相反数,这样得到的最优解不变,但是结果目标函数要变成相反数。
求这个线性规划问题,可以用matlab的最小值函数fmincon。fmincon极小值函数适应用于求约束非线性多变量函数的最小值。该问题求解方法如下:
1、建立目标函数,即
z=80*x11+90*x12+75*x13+60*x21+85*x22+95*x23+92*x31+80*x32+110*x33
2、建立约束函数,即
ceq(1)=100-(x11+x12+x13)
ceq(2)=170-(x21+x22+x23)
ceq(3)=200-(x31+x32+x33)
ceq(4)=120-(x11+x21+x31)
ceq(5)=170-(x12+x22+x32)
ceq(6)=180-(x13+x23+x33)
3、用fmincon函数求解,即
x0=zeros(1,9)
A=[]b=[ ]
Aeq=[]beq=[]
lb=zeros(1,9)ub=[]
[x,fval,exitflag]=fmincon(@(x)myfunc(x),x0,A,b,Aeq,beq,lb,ub,@(x)myconc(x))
4、求解结果
原因说的很清楚了,A的行数应该与b的长度相同。
把
b=[k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k]'改成
b=[k,k,k,k,k,k,k,k,k,k,k,k,k,k,k]'欢迎分享,转载请注明来源:内存溢出
评论列表(0条)