欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

[数学建模笔记] 2.整数编程

最编程 2024-04-20 12:51:16
...
依次在缩小的可行域中求解新构造的线性规划的最优解,并重复上述过程,直到子问题无解或有整数最优解。

例1:

例2:

 2.割平面法

基本思想:

1.如果松弛问题(P0)无解,则(P)无解;

2.如果(P0)的最优解为整数向量,则也是(P)的最优解;

3.如果(P0)的解含有非整数分量,则对(P0)增加割平面条件:即对(P0)增加一个线性约束,将(P0)的可行域割掉一块,使得非整数解恰好在割掉的一块中,但又没有割掉原问题(P)的可行解,得到问题(P1),重复上述的过程。

例1:

 基本步骤:

 程序流程:

3.0-1规划

例1:0-1变量的使用

投资问题:有600万元投资五个项目,收益如表,求利润最大的方案?

 

 例2:互斥约束问题

例3:固定费用问题

 4.指派问题

数学模型:

 非标准形式的指派问题:

1.最大化指派问题:

C=(c_{ij})_{n\times n}中最大元素为m,令B=(b_{ij})_{n\times n}=(m-c_{ij})_{n\times n}

2.人数和工作数不等

人少工作多:添加虚拟的“人”,代价都为0

人多工作少:添加虚拟的工作,代价都为0

3.一个人可做多件工作

该人可化为几个相同的“人”

4.某工作一定不能由某人做

该人该工作的相应代价取足够大M

匈牙利算法:

参考:指派问题:匈牙利算法_Wonz-****博客_匈牙利算法 指派问题

例1:

 例2:

 

 例3:

\begin{bmatrix} 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 \end{bmatrix}

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(:); %把矩阵c转换成向量
a=zeros(10,25); %10个方程(行+列),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);
[x,y]=linprog(c,[],[],a,b,zeros(25,1),ones(25,1));
X=reshape(x,5,5) %重构成矩阵
opt=y