用MATLAB软件解线性规划问题!??

如题所述

第1个回答  2013-08-29
%整数规划分支定界算法matlab通用源程序
%各参数的意义同matlab优化工具箱的线性规划函数linprog
%调用前,输入参数要化成matlab的标准形式
[x,val]=kfz-f-3(n,f,a,b,aeq,beq,lb,ub)
x=zeros(n,1);
x1=zeros(n,1);
m1=2;
m2=1;
[x1,val1]=linprog(f,a,b,aeq,beq,lb,ub);
if (x1==0)
x=x1;
val=val1;
elseif (round(x1)==x1)
x=x1;
val=val1;
else
e1={0,a,b,aeq,beq,lb,ub,x1,val1};
e(1,1)={e1};
zl=0;
zu=-val1;
while (zu~=zl)
for c=1:1:m2
if (m1~=2)
if (cell2mat(e{m1-1,c}(1))==1)
e1={1,[],[],[],[],[],[],[],0};
e(m1,c*2-1)={e1};
e(m1,c*2)={e1};
continue;
end;
end;
x1=cell2mat(e{m1-1,c}(8));
x2=zeros(n,1);
s=0;
s1=1;
s2=1;
lb1=cell2mat(e{m1-1,c}(6));
ub1=cell2mat(e{m1-1,c}(7));
lb2=cell2mat(e{m1-1,c}(6));
ub2=cell2mat(e{m1-1,c}(7));
for d=1:1:n
if (abs((round(x1(d))-x1(d)))>0.0001)&(s==0)
s=1;
lb1(d)=fix(x1(d))+1;
if (a*lb1<=b)
s1=0;
end;
ub2(d)=fix(x1(d));
if (a*lb2<=b)
s2=0;
end;
end;
end;
e1={s1,a,b,aeq,beq,lb1,ub1,[],0};
e2={s2,a,b,aeq,beq,lb2,ub2,[],0};
e(m1,c*2-1)={e1};
e(m1,c*2)={e2};
end;
m1=m1+1;
m2=m2*2;
for c=1:1:m2
if (cell2mat(e{m1-1,c}(1))==0)
[x1,val1]=linprog(f,cell2mat(e{m1-1,c}( 2)),cell2mat(e{m1-1,c}(3)),cell2mat(e{m1-1,c}(4)),cell2mat(e{m1-1,c}(5)),cell2mat(e{m1-1,c}(6)),cell2mat(e{m1-1,c}(7)));
e1={cell2mat(e{m1-1,c}(1)),cell2mat(e{m1-1,c}(2)),cell2mat(e{m1-1,c}(3)),cell2mat(e{m1-1,c}(4)),cell2mat(e{m1-1,c}(5)),cell2mat(e{m1-1,c}(6)),cell2mat(e{m1-1,c}(7)),x1,val1};
e(m1-1,c)={e1};
end;
z=val1;
if ((-z)<(-zl))
e1={1,[],[],[],[],[],[],[],0};
e(m1-1,c)={e1};
elseif (abs(round(x1)-x1)<=0.0001)
zl=z;
end;
end;
for c=1:1:m2
if (cell2mat(e{m1-1,c}(1))==0)
zu=cell2mat(e{m1-1,c}(9));
end;
end;
for c=1:1:m2
if (-cell2mat(e{m1-1,c}(9))>(-zu))
zu=cell2mat(e{m1-1,c}(9));
end;
end;
end;
for c=1:1:m2
if (cell2mat(e{m1-1,c}(1))==0)&(cell2mat(e{m1-1,c}(9))==zu)
x=cell2mat(e{m1-1,c}(8));
end;
end;
val=zu;
end;
第2个回答  2013-08-29
MATLAB求解线性的整数规划可以用分支定界法,但实现起来还是比较困难。可以去下载一个叫YALMIP的工具箱,用他可以解决线性规划,非线性规划,整数规划,混合规划,强烈推荐把这个工具整合到matlab中去,这个工具是私人的,不过可以免费下载使用。不过最好的方法是用LINGO求解。
有了YALMIP工具箱,输入也变的相对简单,代码如下:
x=intvar(2,7);
f=[0.487,0.520,0.613,0.720,0.487,0.520,0.640;
0.487,0.520,0.613,0.720,0.487,0.520,0.640]*x';
F=set(x>=0);
F=F+set(x(1,1)+x(2,1)<=8)+set(x(1,2)+x(2,2)<=7)...
+set(x(1,3)+x(2,3)<=9)+set(x(1,4)+x(2,4)]<=6)...
+set(x(1,5)+x(2,5)<=6)+set(x(1,6)+x(2,6)<=4);
F=F+set([2,3,1,0.5,4,2,7;2,3,1,0.5,4,2,7]*.x'<=[40;40])...
+set([0.487,0.52,0.613,0.72,0.487,0.52,0.64;
0.487,0.52,0.613,0.72,0.487,0.52,0.64].*x'<=[10.2;10.2])...
+ set([0,0,0,0,0.487,0.52,0.64;
0,0,0,0,0.487,0.52,0.64].*x'<=[3.027;3.027]);
solvesdp(F,-f)

下面用lingo求解:
model:
max=0.487*x11+0.52*x12+0.613*x13+0.72*x14+0.487*x15+0.52*x16+0.64*x17+0.487*x21+0.52*x22+0.613*x23+0.72*x24+0.487*x25+0.52*x26+0.64*x27;
x11+x21<=8;
x12+x22<=7;
x13+x23<=9;
x14+x24<=6;
x15+x25<=6;
x16+x26<=4;
2*x11+3*x12+x13+0.5*x14+4*x15+2*x16+x17<=40;
2*x21+3*x22+x23+0.5*x24+4*x25+2*x26+x27<=40;
0.487*x11+0.52*x12+0.613*x13+0.72*x14+0.487*x15+0.52*x16+0.64*x27<=10.2;
0.487*x21+0.52*x22+0.613*x23+0.72*x24+0.487*x25+0.52*x26+0.64*x17<=10.2;
0.487*x15+0.52*x16+0.64*x17<=3.027;
0.487*x25+0.52*x26+0.64*x27<=3.027;

@gin(x11);@gin(x12);@gin(x13);@gin(x14);@gin(x15);@gin(x16);@gin(x17);
@gin(x21);@gin(x22);@gin(x23);@gin(x24);@gin(x25);@gin(x26);@gin(x27);
end

运行结果:
(由于字数超限,运行结果已删除)

matlab线性规划
利用工具箱求解①的问题,填入相应的数据,然后点击【start】按钮,得到结果如下 可以看到,最优解与linprog命令的方式求得的结果是相同的,但最优值不是-78,因为这是迭代的结果,只有在迭代次数区域无穷的时候,才能得到准确值-78.再举一例,利用MATLAB求解下面这个线性规划问题 这是求最大值问题,要...

MATLAB线性规划函数求解线性规划
在MATLAB中,线性规划(Linear Programming, LP)是一种核心的优化技术,其目标是通过设定向量变量的线性函数来解决最优化问题。线性规划问题的通用形式可以表述为:最小化 f(x)满足条件:矩阵A与向量x的乘积小于等于 b Aeq·x 等于 beq 变量x的下界vlb小于等于 x,并且x的上界vub大于等于x 其中,b, ...

数模| Matlab求解线性\/整数规划问题之linprog、intlinprog、optimprob...
求解步骤具体求解步骤如下:基于问题:创建优化变量,构建目标和约束表达式,使用solve函数求解。基于求解器:将所有参数整理成矩阵形式,调用linprog或intlinprog函数进行计算。总结本文重点介绍了使用MATLAB求解线性\/整数规划问题的关键步骤和方法。虽然这些工具适用于解决大部分问题,但在处理高维和复杂问题时可能...

Matlab求解二次线性规划,求命令代码。下图
该问题可用fmincon函数来解决。第一步,创建目标函数,y=myfun(x)。其内容是 y=x1^2+x2^2+8;第二步,创建约束条件函数,[c,ceq]=mycon(x)。其内容是 c(1)=-(x1^2-x2);c(2)=-(x1+x2^2+2);ceq=[];第三步,创建主程序命令,如下 lb=[0;0];ub=[];[x,fval,exitflag]=fmin...

MATLAB11:求解线性规划问题
据此制定一个总利润最大的生产计划    语法 [x,fval] = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)    注意:linprog()解决问题的标准格式如下:   根据标准格式, 需要转换例一的问题为最小化问题!   z=-fval=2675 ...

如何用MATLAB处理线性规划问题
利用linprog()函数就可以了,下面是我做的一个题,给你参考一下:求解线性规划问题:min z=-0.9*x1-0.45*x2+0.05*x3-1.4*x4-0.95*x5-0.45*x6-1.9*x7-1.45*x8-0.95*x9 s.t.x1+x2+x3<=2000;x4+x5+x6<=2500;x7+x8+x9<=1200;-0.4*x1+0.6*x2+0.6*x3<=0;-0.2...

matlab中线性规划的使用
线性规划是针对有约束条件下的最优化的问题,matlab中线性规划主要是对linprog函数的使用,介绍如下:首先,启动matlab软件,打开软件进入matlab软件主界面,如图所示:线性规划问题使用的函数linprog函数的使用语法,如图:先举一个关于线性规划的例子,求取目标函数-x1-x2,约束条件如图所示:现在可以针对上面...

matlab求一线性规划问题的最优解
求这个线性规划问题,可以用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(...

请问一下,这个线性规划如何用matlab求解
题主的线性规划问题,可以用matlab的fmincon函数求解。求解方法:1、首先,建立目标函数 z=4*x(1)+8*x(2)+。。。+10*x(24)2、然后,建立约束函数 ceq(1)=x(1)+。。。+x(8)-(300+x(25))ceq(2)=x(9)+。。。+x(16)-(250+x(26))ceq(3)=x(17)+。。。+x(24)-(200+x(27...

matlab求解线性规划最优解 请大神帮忙
题主的线性规划最优解问题,可以这样来实现。第一步,创建目标函数,fmincon_fun(k),其内容为 a=k(1);b=k(2);c=k(3);S=3.70;P=3.75;K=1.8;R= (S*P*K)\/(S*P+S*K+P*K);ZS=(b+c)-S * a;第二步,创建约束条件函数,fmincon_con(k),其内容为 g=[b + c - R;-...

相似回答