《数学建模算法与应用第二版》——chapter2. 整数规划

本文介绍了整数规划,包括定义、分类、特点和求解方法。重点讲解了0-1整数规划,如相互排斥的约束条件和指派问题,并提到了蒙特卡洛法作为非线性整数规划的解决方案。还探讨了Matlab和Lingo在整数规划求解中的应用。
摘要由CSDN通过智能技术生成

1. 概论

1.1 定义

规划中的变量(部分或全部)限制为整数时,称为整数规划。目前所流行的求解整数规划的方法,往往只适用于整数线性规划,一般的整数规划方法没有一般通用的方法。

1.2 分类

整数线性规划模型大致可分为两类:

  1. 变量全限制为整数时,称纯(完全)整数规划。
  2. 变量部分限制为整数的,称混合整数规划。

1.3 特点

  1. 原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况:
    ① 原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。
    ② 整数规划无可行解。
    ③有可行解(当然就存在最优解),但最优解值变差。
  2. 整数规划最优解不能按照实数最优解简单取整而获得。

1.4 求解方法

  1. 分枝定界法—可求纯或混合整数线性规划
  2. 割平面法—可求纯或混合整数线性规划
  3. 隐枚举法—求解“0-1”整数规划:
    ①过滤隐枚举法;
    ②分枝隐枚举法。
  4. 匈牙利法—解决指派问题(“0-1”规划特殊情形)
  5. 蒙特卡洛法—求解各种类型规划

2. 0-1整数规划

变量值只取0和1的一种特殊的整数规划,此时的变量称为0-1变量或者二元变量。

2.1 相互排斥的约束条件

在这里插入图片描述
如果有m个相互排斥的约束条件:
在这里插入图片描述

2.2 关于固定费用的问题

在讨论线性规划时,有些问题是要求使成本为最小。那么,可设固定成本为常数,并在线性规划的模型中不必明显列出。但有些固定费用(固定成本)的问题不能用一般线性规划来描述,而可改变为混合整数规划来解决,见下例。
在这里插入图片描述

2.3 指派问题的数学模型

拟分配n人去做n项工作,每人做且仅做一项工作,若分配第i人去做第j在这里插入图片描述

3. 蒙特卡洛法(随机取样法)

对于非线性整数规划目前尚未有一种成熟而准确的求解方法,因为非线性规划本身的通用有效解法尚未找到,更何况是非线性整数规划。对于非线性整数规划问题,采用显枚举法计算量大,应用蒙特卡洛法,可找到满意解。
在这里插入图片描述

%	编写mengte.m文件
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];

编写如下matlab程序求解:

rand('state',gum(clock);	%初始化随机数发生器
p0=0;
tic	% 计时开始
for i=1:10^6
	x=randi([0,99],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

由于是随机模拟,因此每次的运行结果都是不一样的。本题可以使用Lingo软件求得精确的全局最优解,程序如下∶

model:
sets:
row/1..4/:b;
col/1..5/:cl,c2,x;
link(row,col):a;
endsets 
data;
cl=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

4. 整数规划的计算机求解

Matlab求解混合整数线性规划的命令为
[x,fval]=intlinprog(f,intcon,A,b,Aeq,beq,Lb,ub)
对应的数学模型为: min ⁡ x f T x s . t . { x 为 整 数 A ⋅ x ≤ b A e q

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值