2.1 基本概念
整数规划:数学规划中的变量(部分或全部)限制为整数
目前只能求解整数线性规划
整数规划的解有如下三种情况:
- 没有可行解(最优解不是整数)
- 存在最优解(最优解为整数)
- 有可行解(最优解值变差)
2.2 0-1整数规划
定义:变量x仅取值0或1,即0-1变量
2.2.1 相互排斥的约束条件
- 引进一个充分大的数,削弱取一种情况时另一种情况下的约束条件
- 改为普通的约束条件(不常用)
若有m个互相排斥的约束条件
需保证只有一个起作用,则引进m个0-1变量:
和一个充分大的常数M,则有:
2.2.2 混合整数规划(固定费用)
定义:变量部分限制为整数
可用约束条件:
y为引入的0-1变量,ε\varepsilonε为充分小的正常数,M为充分大的正常数
上式即代替了该分段函数:
2.2.3 指派问题
关键:给出系数矩阵C
规划模型为:(x为引入的0-1变量)
2.3 蒙特卡洛法(随机取样法)
目的:求解非线性整数规划
matlab程序如下:
定义目标函数 f 和约束向量函数 g
mente.m
function [f,g]=mengte(x);
f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)-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); %产生1行5列的区间[0,99]上的随机整数数
[f,g]=mengte(x);
if all(g<=0)
if p0<f
x0=x; p0=f; %记录下当前较好的解
end
end
end
x0,p0
toc %计时结束
2.4 整数线性规划的计算机求解
matlab求解混合整数线性规划,用intlinprog函数,但必须把所有的决策变量化成一维决策变量,即需要做变量替换。
标准形式为:
(A,Aeq为矩阵,其余变量均为列向量)
有指派问题的matlab程序:
需要把x变为一维决策变量
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);
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])
附:数学规划问题用lingo解决更简单方便,此处不过多讲解。