[数学建模]整数规划

1.2整数规划

1.2.1定义

定义 规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。目前所流行的求解整数规划的方法,往往只适 用于整数线性规划。目前还没有一种方法能有效地求解一切整数规划。

1.2.2分类

1、变量全限制为整数时,称纯(完全)整数规划。

2、变量部分限制为整数的,称混合整数规划。

1.2.3特点

原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况:

①原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。

②整数规划无可行解。

1.2.4求解方法

(i)分枝定界法—可求纯或混合整数线性规划。

(ii)割平面法—可求纯或混合整数线性规划。

(iii)隐枚举法—求解“0-1”整数规划:

①过滤隐枚举法;

②分枝隐枚举法。

(iv)匈牙利法—解决指派问题(“0-1”规划特殊情形)。

  (v)蒙特卡罗法—求解各种类型规划。

1.2.5例题分析

解非线性整数规划-----------蒙特卡罗方法

maxz=x_{1}^{2}+x_{2}^{2}+x_{3}^{2}+x_{4}^{2}+x_{5}^{2}

0\leqslant x_{i}\leqslant 99(i=1...5)

x_{1}+x_{2}+x_{3}+x_{4}+x_{5}\leqslant 400

x_{1}+2x_{2}+2x_{3}+x_{4}+6x_{5}\leqslant 800

2x_{1}+x_{2}+6x_{3}\leqslant 200

x_{3}+x_{4}+5x_{5}\leqslant 200

matlab代码

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];
%编写M文件mainint.m如下求问题的解:
rand('state',sum(clock)); p0=0;
tic
for i=1:10^6 
x=99*rand(5,1);
x1=floor(x);
x2=ceil(x); 
[f,g]=mengte(x1);
if sum(g<=0)==4 
    if p0<=f
       x0=x1;
       p0=f; 
    end
end 
[f,g]=mengte(x2); 
if sum(g<=0)==4
   if p0<=f
      x0=x2;
      p0=f; 
   end
end 
end 
x0,p0 

lingo代码

model: 
sets:
row/1..4/:b; col/1..5/:c1,c2,x;
link(row,col):a; 
endsets
data: 
c1=1,1,3,4,2;
c2=-8,-2,-3,-1,-2; 
a=1     1     1     1     1
  1	2     2     1     6
  2	1     6	    0	  0
  0	0     1	    1	  5;
b=400,800,200,200;
enddata 
max=@sum(col:c1*x^2+c2*x);
@for(row(i):@sum(col(j):a(i,j)*x(j))<b(i));
@for(col:@gin(x));
@for(col:@bnd(0,x,99));
end

猜你喜欢

转载自blog.csdn.net/weixin_42785537/article/details/81204099