A. 请问一下,这个线性规划如何用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))
ceq(4)=x(1)+x(9)+x(17)-150
。。。
ceq(12)=x(25)+x(26)+x(27)-220
3、最后,建立运算命令代码
x0=zeros(1,27); %初值需要调整
A=[];b=[];Aeq=[];beq=[];VLB=[];VUB=[];
[x,fval,exitflag]=fmincon(@(x)fun(x),x0,A,b,Aeq,beq,VLB,VUB,@(x)nonlcon(x))
4、具体格式文件
B. 用MATLAB优化工具箱解线性规划,请举例说明.
应该是数学建模吧,一般解线性规划问题都用LINGO,简单易学。
例如:钢管原材料内每根长19m,现需容要A,B,C,D四种钢管部件,长度分别为4m,5m,6m,8m,数量分别为50,10,20,15根因不同下料方式之间的转换会增加成本,因而要求不同的下料方式不超过3种,试安排下料方式,使所需圆钢材料的总数量最少。
在LINGO中运行如下程序即可。
model:
sets:
bujian/1..4/:L,b;
cutfa/1,2,3,4/:x;
links(bujian,cutfa):N;
endsets
data:
L=4 5 6 8;
b=50 10 20 15;
enddata
min=@sum(cutfa:x);
ZL=19;
@for(bujian(i):@sum(cutfa(j):N(i,j)*x(j))>=b(i));
@for(cutfa(j):@sum(bujian(i):L(i)*N(i,j))<=ZL);
@for(cutfa(j):@sum(bujian(i):L(i)*N(i,j))>ZL-4);
@for(cutfa:@gin(x));@for(links:@gin(N));
end
C. 用MATLAB软件求解一个线性规划,要附带程序
>> f = [0;0;0;1];
>> A = [-4 -5 -6 -5;-3 -4 -3 -3;-1.5 -2 -3 -6;8 12 6 0;12 8 12 0]
A =
-4.0000 -5.0000 -6.0000 -5.0000
-3.0000 -4.0000 -3.0000 -3.0000
-1.5000 -2.0000 -3.0000 -6.0000
8.0000 12.0000 6.0000 0
12.0000 8.0000 12.0000 0
>> b = [-2050;-1720;-1190;4500;4800];
>> x = linprog(f,A,b)
D. 求应用MATLAB的线性规划实例
不要你的悬赏了。只提示你查查matlab的lp函数,单纯形的。
需要装优化工具箱,这在国内不难内办到容吧。一些Matlab论坛里应该还有修正单纯形、对偶单纯形、Wolfe-Dantzig分解和Karmarkar内点法的Code,自己查查看。Good
luck!
E. 这个线性规划用matlab编程求解,怎么编
基本是利用linprog函数,简单给你介绍一下这个函数:
首先将线性规划问题化为标准型:
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
0;2
0
0
1
0;3
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向量取你题中的相反数,这样得到的最优解不变,但是结果目标函数要变成相反数。
V1,v2是对x向量的上下限限制,你的题里下限就是[0
0
0
0
0],上限是正无穷。
A1和b1对应不等式约束,换算成我上面写的标准形式的。
还有我写错了不好意思,最后一句改成[x,fv]=linprog(z,[],[],A2,b2,v1,v2,x0,[])
就行了
F. 用MATLAB求解线性规划问题怎么编程。。
基本是利用linprog函数,简单给你介绍一下这个函数:
首先将线性规划问题化为标准型:
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 0;2 0 0 1 0;3 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向量取你题中的相反数,这样得到的最优解不变,但是结果目标函数要变成相反数。
第二个,不知道你的问题里为什么只有等式约束,看看你是不是抄错了。
G. 用MATLAB软件解线性规划问题!
%整数规划分支定界算法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;
H. 线性规划 matlab求解工具有哪些
线性规划是一种优化方法,Matlab优化工具箱中有现成函数linprog对如下式描述的LP问题求解:
% min f'x
% s.t .(约束条件): Ax<=b
% (等式约束条件): Aeqx=beq
% lb<=x<=ub
linprog函数的调用格式如下:
x=linprog(f,A,b)
x=linprog(f,A,b,Aeq,beq)
x=linprog(f,A,b,Aeq,beq,lb,ub)
x=linprog(f,A,b,Aeq,beq,lb,ub,x0)
x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
[x,fval]=linprog(…)
[x, fval, exitflag]=linprog(…)
[x, fval, exitflag, output]=linprog(…)
[x, fval, exitflag, output, lambda]=linprog(…)
其中:
x=linprog(f,A,b)返回值x为最优解向量。
x=linprog(f,A,b,Aeq,beq) 作有等式约束的问题。若没有不等式约束,则令A=[ ]、b=[ ] 。
x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 中lb ,ub为变量x的下界和上界,x0为初值点,options为指定优化参数进行最小化。
Options的参数描述:
Display显示水平。 选择’off’ 不显示输出;选择’Iter’显示每一 步迭代过程的输出;选择’final’ 显示最终结果。
MaxFunEvals 函数评价的最大允许次数
Maxiter 最大允许迭代次数
TolX x处的终止容限
[x,fval]=linprog(…) 左端 fval 返回解x处的目标函数值。
[x,fval,exitflag,output,lambda]=linprog(f,A,b, Aeq,beq,lb,ub,x0) 的输出部分:
exitflag 描述函数计算的退出条件:若为正值,表示目标函数收敛于解x处;若为负值,表示目标函数不收敛;若为零值,表示已经达到函数评价或迭代的最大次数。
output 返回优化信息:output.iterations表示迭代次数;output.algorithm表示所采用的算法;outprt.funcCount表示函数评价次数。
lambda 返回x处的拉格朗日乘子。它有以下属性:
lambda.lower-lambda的下界;
lambda.upper-lambda的上界;
lambda.ineqlin-lambda的线性不等式;
lambda.eqlin-lambda的线性等式。
I. MATLAB优化工具箱--线性规划问题
这个是整数规划。
你得用别的函数。
比如:ipslv_mex,这个好像得去网上载。
f=ones(7,1);
A=[1,4,0,0,3,1,2;1,0,3,0,1,2,0;1,0,0,2,0,0,1];
b=[50;30;25];
intlist=zeros(7,1); %代表专7个变属量都是整数
xmin=ones(7,1); %代表7个变量的最小值均为1
xmax=inf*ones(7,1); %代表7个变量最大值均为无穷大
ctype=ones(3,1); %代表三个方程都是Ax=b,大于等于的话为1,小于等于的话为-1
[x,how]=ipslv_mex(f,A,b,intlist,xmax,xmin,ctype)
结果为:
x =
16
1
1
4
9
1
1