文章目录
整数规划的定义
数学规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。
求解整数线性规划的方法
分枝定界法——可求纯或混合整数线性规划。
割平面法——可求纯或混合整数线性规划。
隐枚举法——求解“0-1”整数规划
- 过滤隐枚举法。
- 分支隐枚举法。
匈牙利法——解决指派问题(0-1规划特殊情形)
蒙特卡罗法——求解各种类型规划。
使用matlab
clc,clear
x=unifrnd(0,12,[1,10000000]);
y=unifrnd(0,9,[1,10000000]);
pinshu=sum(y<x.^2&x<=3)+sum(y<12-x&x>=3);
area_appr=12*9*pinshu/10^7
function[f,g]=mengte(x);
f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)^2-8*x(1)-2*x(2)-3*x(3)-x(4)-2*x(5);
g=[sum(x)-400
x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800
2*x(1)+x(2)+6*x(3)-200
x(3)+x(4)+5*x(5)-200];
rand('state',sum(clock))%初始化随机数发生器
p0=0;
tic%计时开始
for i=1:10^6
x=randi([0,99],1,5);
[f,g]=mengte(x);
if all(g<=0)
if p0<f
x0=x;p0=f;%记录当前较好的解
end
end
end
x0,p0
toc
使用lingo
局部最优解
书上说可以直接求出精确的全局最优解,但是当我敲入代码运行出来的结果是局部最优解,还对其行和列进行改变,发现还是局部最优解,而不是全局最优解。
全局最优解
lingo->options->Global Solver
勾上Use Global Options,应用
2.4整数线性规划的计算机求解
混合整数线性规划问题的求解
clc,clear
c=[3 8 2 10 3
8 7 2 9 7
6 4 2 7 5
8 4 2 3 5
9 10 6 9 10];%指派矩阵
c=c(:);%把这个指派矩阵变成一维决策变量
a=zeros(10,25);%10行25列的零矩阵,因为决策矩阵是5*5的,然后c=c(:);%把这个指派矩阵变成一维决策变量,变成了25行的列向量。
intcon=1:25;
for i=1:5
a(i,(i-1)*5+1:5*i)=1;
a(5+i,i:5:25)=1;
end
b=ones(10,1);
lb=zeros(25,1);
ub=ones(25,1);
x=intlinprog(c,intcon,[],[],a,b,lb,ub);
x=reshape(x,[5,5])