Ⅰ 整數規劃該如何用MATLAB求解
整數線性規劃要下載工具箱來解決,很麻煩
用LINGO吧,方便簡單,下面附帶一個例子:
LINGO軟體用於線性或非線性規劃(無論是連續規劃還是整數規劃),因此包含了LINDO的功能。在LINGO中,所有的函數均以「@」符號開始,如約束中@gin(x1)表示x1為整數,用bin(x1)表示x1為0-1整數。
鋼管下料問題的求解
以切割後剩餘的總余料量最小為目標,建立LINGO模型:
min= 3*x1+x2+3*x3+3*x4+x5+x6+3*x7;
4*x1+3*x2+2*x3+x4+x5 >=50;
x2+2*x4+x5+3*x6 >= 20;
x3+x5+2*x7 >= 15;
@gin(x1);
@gin(x2);
@gin(x3);
求解可以得到最優解如下:
OBJECTIVE FUNCTION VALUE
1) 27.00000
VARIABLE VALUE REDUCED COST
X1 0.000000 3.000000
X2 12.000000 1.000000
X3 0.000000 3.000000
X4 0.000000 3.000000
X5 15.000000 1.000000
X6 0.000000 1.000000
X7 0.000000 3.000000
Ⅱ MatLab求解整數規劃
各種主流的方法不讓用,各種主流的程序也不讓用,老師到底想要你們做什麼?
MATLAB的整數規劃能力比較有限,早期主要就是0-1二值規劃的bintprog,後來遺傳演算法ga可以求解不帶等式約束的非線性規劃,再後來還有個整數線性規劃的函數intlinprog。第三方比較著名的有個個人作者編寫的分支定界法函數bnb20。
Ⅲ matlab中NSGA-Ⅱ是否可以求解整數規劃
最近,有很多同行問我在Matlab中怎樣求解(混合)整數規劃問題,我這里就說一下我所知道的情況。
Matlab 7的優化工具包只能求解0-1變數的(邏輯)整數規劃問題,要解一般的整數規劃問題,推薦下載一個免費的,叫做LP_SOLVE的軟體,支持Matlab,在yahoo討論組里有下載。
解壓後,裡面有個文件夾,將其命名為"lp_solve",建議將這個文件夾拷貝到matlab程序文件夾中的toolbox文件夾中,在lp_solve文件夾裡面有個lpsolve55.dll文件,將其拷貝到系統文件夾%system32中,然後啟動matlab,在file菜單里點擊setpath,將%MATLAB701/toolbox/lp_solve 路徑添為默認路徑,現在就可以直接使用lp_solve文件夾裡面的函數了。
為了根方便地使用各種優化軟體,尤其是lp_solve,我還建議有興趣的同行再下載一個叫做"Yalmip" 的軟體包,同樣解壓後放在matlab程序文件夾中的toolbox文件夾中,再添加其路徑(add with subfolders)。這個軟體的重要作用在於使得添加約束條件的過程變得相當方便,例如變數X是一個長度為5的向量,且有約束x1+x2+x3+x4+x5=1,利用Yalmip就可以寫成
X=sdpvar(5,1); %定義變數
set(sum(X)==1);%定義約束條件
Ⅳ matlab中如何解決整數規劃問題
matlab不是好的解決整數規劃的工具,用lingo,他額特色就是可以用來解整數規劃問題,還可建選址模型,也很好學
Ⅳ matlab整數規劃問題
clc;
Maxf=-100000;
s=0.0;
k=1;
z1=zeros(50,1);
z2=zeros(50,1);
for i=0:1:66
for j=0:1:100-i
if (2*j-i)>=0
s=98*i+277*j-i^2-0.3*i*j-2*j^2;
if (s-Maxf)==0
k=k+1;
z1(k)=i;
z2(k)=j;
else
if s>Maxf
Maxf=s;
z1(1)=i;
z2(1)=j;
k=1;
end
end
end
end
end
Str=strcat('最大值MAX為:',num2str(Maxf));
disp(Str);
x1=z1(1:k)
x2=z2(1:k)
我已經驗證過了~OK的哈!
Ⅵ matlab整數規劃程序
可以用YALMIP工具箱解整數規劃
定義變數:
sqdvar()實型
intvar()整型
binvar()0-1型
設定目標函數 :
f=目標函數
設定限定條件:
F=set(限定條件)
多個限定條件用加號相連:
F=set(限定條件)+set(限定條件1)+set(限定條件2)……
求解: solvesdp(F,f)
這里解得是F條件下目標函數f的最小值,要求最大值f前面加個負號
求解之後查看數值 :
double(f) double(變數)
intvar(m,n):生成整數型變數;
sdpvar(m,n):生產變數;
solvesdp(F,f):求解最優解(最小值),其中F為約束條件(用set連接),f為目標函數
double:顯示求解的答案
有個例子:
已知非線性整數規劃為:
Max z=x1^2+x2^2+3*x3^2+4*x4^2+2*x5^2-8*x1-2*x2-3*x3-x4-2*x5
s.t.
0<=xi<=99(i=1,2,...,5)
x1+x2+x3+x4+x5<=400
x1+2*x2+2*x3+x4+6*x5<=800
2*x1+x2+6*x3<=800
x3+x4+5*x5<=200
matlab中輸入
>> x=intvar(1,5);
f=[1 1 3 4 2]*(x'.^2)-[8 2 3 1 2]*x';F=set(0<=x<=99);
F=F+set([1 1 1 1 1]*x'<=400)+set([1 2 2 1 6]*x'<=800)+set(2*x(1)+x(2)+6*x(3)<=800);
F=F+set(x(3)+x(4)+5*x(5)<=200);solvesdp(F,-f);
max=double(f)
sx=double(x)
* Starting YALMIP integer branch & bound.
* Lower solver : fmincon-standard
* Upper solver : rounder
* Max iterations : 300
Warning : The relaxed problem may be nonconvex. This means
that the branching process not is guaranteed to find a
globally optimal solution, since the lower bound can be
invalid. Hence, do not trust the bound or the gap...
Node Upper Gap(%) Lower Open
1 : -8.020E+004 0.03 -8.025E+004 2
2 : -8.020E+004 0.03 -8.025E+004 1
3 : -8.020E+004 0.00 -8.020E+004 2
+ 3 Finishing. Cost: -80199
max =
80199
sx =
53 99 99 99 0
Ⅶ matlab怎麼實現整數線性規劃或者非線性規劃
intlinprog 函數,用於進行整數規劃和整數非整數的混合規劃
[x,y,flag]=intlinprog(f,[1,2],A,b,C,d,xm,xM)
Ⅷ 用matlab編程解決整數規劃
將下面函數fzdj保存為fzdj.m文件。
function [x,val]=fzdj(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;
然後在命令窗口中輸入:
n=2;f=[0;-1];%轉化為求最小
a=[3 2;-3 2];
b=[6;0];
lb=[0;0];
ub=[inf,inf];
aeq=[];
beq=[];
[x,val]=fzdj(n,f,a,b,aeq,beq,lb,ub)
結果:
x =
1
1
val =
-1
即在點(1,1)最大為1
Ⅸ matlab中,怎麼做整數規劃
做整數規劃編程是個很寬泛的題目,可以參考教程,不是幾句話能說清的。如果你有題,我可以給你寫個程序,舉例說明。
Ⅹ 關於Matlab中怎樣求解整數規劃問題
線性規劃問題:min f*x
s.t. A*x<=b Aeq*x=beq lb<=x<=ub
其中:A為不等式約束的系數矩陣,Aeq表示等式約束的系數矩陣,b表示不等式約束的常向量,beq表示等式約束的常向量,lb和ub表示自變數的上下范圍。
求解函數:
linprog(f,A,b,Aeq,beq,lb,ub)
其中: f,A,b ,Aeq,beq,lb,ub的定義如上