❶ 在用matlab的优化工具箱中的linprog求解器或者其他求解器求最优值时,怎么设置变量约束条件为整数
可以用分支定界法求解整数规划问题,给你源码:
function [x,fm] = IntProgFZ(f,A,b,Aeq,beq,lb,ub)
x = NaN;
fm = NaN;
NF_lb = zeros(size(lb));
NF_ub = zeros(size(ub));
NF_lb(:,1) = lb;
NF_ub(:,1) = ub;
F = inf;
while 1
sz = size(NF_lb);
k = sz(2);
opt = optimset('TolX',1e-9);
[xm,fv,exitflag] = linprog(f,A,b,Aeq,beq,NF_lb(:,1),NF_ub(:,1),[],opt);
if exitflag == -2
xm = NaN;
fv = NaN;
end
if xm == NaN
fv = inf;
end
if fv ~= inf
if fv < F
if max(abs(round(xm) - xm))<1.0e-7
F = fv;
x = xm;
tmpNF_lb = NF_lb(:,2:k);
tmpNF_ub = NF_ub(:,2:k);
NF_lb = tmpNF_lb;
NF_ub = tmpNF_ub;
if isempty(NF_lb) == 0
continue;
else
if x ~= NaN
fm = F;
return;
else
disp('不存在最优解!');
x = NaN;
fm = NaN;
return;
end
end
else
lb1 = NF_lb(:,1);
ub1 = NF_ub(:,1);
tmpNF_lb = NF_lb(:,2:k);
tmpNF_ub = NF_ub(:,2:k);
NF_lb = tmpNF_lb;
NF_ub = tmpNF_ub;
[bArr,index] = find(abs((xm - round(xm)))>=1.0e-7);
p = bArr(1);
new_lb = lb1;
new_ub = ub1;
new_lb(p) = max(floor(xm(p)) + 1,lb1(p));
new_ub(p) = min(floor(xm(p)),ub1(p));
NF_lb = [NF_lb new_lb lb1];
NF_ub = [NF_ub ub1 new_ub];
continue;
end
else
tmpNF_lb = NF_lb(:,2:k);
tmpNF_ub = NF_ub(:,2:k);
NF_lb = tmpNF_lb;
NF_ub = tmpNF_ub;
if isempty(NF_lb) == 0
continue;
else
if x ~= NaN
fm = F;
return;
else
disp('不存在最优解!');
x = NaN;
fm = NaN;
return;
end
end
end
else
tmpNF_lb = NF_lb(:,2:k);
tmpNF_ub = NF_ub(:,2:k);
NF_lb = tmpNF_lb;
NF_ub = tmpNF_ub;
if isempty(NF_lb) == 0
continue;
else
if x ~= NaN
fm = F;
return;
else
disp('不存在最优解!');
x = NaN;
fm = NaN;
return;
end
end
end
end
❷ 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优化工具箱--线性规划问题
这个是整数规划。
你得用别的函数。
比如: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
❹ 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求解整数规划
各种主流的方法不让用,各种主流的程序也不让用,老师到底想要你们做什么?
MATLAB的整数规划能力比较有限,早期主要就是0-1二值规划的bintprog,后来遗传算法ga可以求解不带等式约束的非线性规划,再后来还有个整数线性规划的函数intlinprog。第三方比较著名的有个个人作者编写的分支定界法函数bnb20。
❻ 整数规划该如何用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 整数规划工具箱
❽ matlab怎么实现整数线性规划或者非线性规划
intlinprog 函数,用于进行整数规划和整数非整数的混合规划
[x,y,flag]=intlinprog(f,[1,2],A,b,C,d,xm,xM)