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