数模笔记-2-整数规划

整数规划的定义:

数学规划中的变量(部分或者全部)限制为整数的时候,称为整数规划。

整数规划的分类:

如果不加特殊说明,指的就是整数线性规划(在线性规划的模型中变量限制为整数)。分为两类:
1:变量全部限制为整数,称纯整数规划。
2:变量部分限制为整数,称混合整数规划。

整数规划的特点:

1:原线性规划的最优解全是整数,则自变量限制为整数之后,最优解不变。
2:整数规划没有可行解。

0-1型整数规划

顾名思义,在该模型下,变量xi的值只能取到0或者1,称xi为0-1变量或者二进制变量。可由约束条件 0 <= xi <= 1而且xi为整数所代替。
在一些互相排斥的约束问题:比如两种方式可供选择,但是只能选择一种的情形。
在一些指派问题的数学模型中:比如:n个人分配去做n项工作,每个人都做且都只能做一项工作。

蒙特卡洛随机取样法求解

先给出一个例子:
y = x^2, y = 12 - x与x轴在第一象限围成一个曲边三角形,设计一个随机试验求该图形的面积。

分析:可以在一个已知矩形面积(包含所求的曲边三角形)的矩形中生成n个随机数之后统计落在去边三角形中的随机数的个数,之后计算比值,从而得出面积。

clc
clear
x = unifrnd(0, 12, [1, 100000]);
y = unifrnd(0, 9, [1, 100000]);
ps = sum(y < x .^ 2 & x <= 3) + sum(y < 12 - x & x >= 3)
area = ps/100000 * 9 * 12

上述内容简单的介绍了蒙特卡洛法的基本思想。

实战:用蒙特卡洛法求解非线性整数规划。
在这里插入图片描述

% 首先编写函数
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]
end

% 正式的Matlab代码
rand('state', sum(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 % 计时结束

整数线性规划的计算机求解

在这里插入图片描述

在Matlab中求解混合整数线性规划的命令为:

[x, fval] = intlinprog(f, intcon, a, b, aeq, beq, lb, ub)
% f, x, intcon, beq, lb, ub为列向量;a, aeq为矩阵。

混合整数规划问题如下:
在这里插入图片描述

clc
clear
f = [-3;-2;-1]
intcon = 3
a = ones(1,3)
b = 7
aeq = [4 2 1]
beq = 12
lb = zeros(3,1)
ub = [inf;inf;1]
x = intlinprog(f, intcon, a, b, aeq, beq, lb, ub)
% 求得最优解为x1 = 0, x2 = 5.5, x3 = 1; 目标函数的最优值为 z = -12。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值