2020年中国大学生数学建模竞赛备赛(三)

第二章 整数规划

2.1 整数规划的基本知识

1、定义:数学规划中的变量(部分或全部)限制为整数时,称为整数规划。
2、分类:
(1)变量全限制为整数时,称纯(完全)整数规划。
(2)变量部分限制为整数时,称混合整数规划。
3、特点:
(1)整数规划无可行解(在原线性规划最优解是实数解)。
(2)整数规划最优解不能由实数最优解简单取整得到。
4、求解方法:
(1)分枝定界法;(2)割平面法;(3)隐枚举法:过渡隐枚举法、分枝隐枚举法;(4)匈牙利方法(5)蒙特卡罗方法。

2.2 0-1型整数规划,一种特殊的整数规划

核心:构造相互排斥的约束条件。
可以采用如下的方法解决:
如果有m个互相排斥的约束条件,
在这里插入图片描述

2.2.2固定费用问题

在这里插入图片描述

2.2.3指派问题

在这里插入图片描述

2.3 蒙特卡罗法(随机取样法)

核心:所谓蒙特卡罗方法,就是从概率理论来估计出对应区间范围内的一个满意解。
应用:
1、用蒙特卡罗方法求解图形面积的近似值(投点法)
例题: y = x 2 , y = 12 − x y=x^2,y=12-x y=x2,y=12x x x x轴在第一象限围成一个曲边三角形,求该图形面积的近似值。
解释:在矩形区域 [ 0 , 12 ] ∗ [ 0 , 9 ] [0,12]*[0,9] [0,12][0,9]上产生服从均匀分布的 1 0 7 10^7 107个随机点,统计随机点落在曲边三角形的频数。

clc,clear
x=unifrnd(0,12,[1,10^7]);
y=unifrnd(0,9,[1,10^7]);
pinshu=sum(y<x.^2&x<=3)+sum(y<12-x&x>=3);//值得学习的是,可以在计算函数中用表达式控制计算的范围
area_appr=12*9*pinshu/10^7;

2、用Monte Carlo方法求解已知的非线性整数规划
编程时,可以先新建一个目标函数文件,里面包含定义的目标函数和约束条件;再编写求解过程和搜索的主程序。

//函数体部分
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];

//主程序部分
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
disp([x0,p0]);
toc//计时结束

2.4 指派问题的MATLAB求解

使用intlinprog函数,但是要将所有的决策变量转化为一维决策变量。
在编程时,注意对约束条件的改写,参考2.2.3中的模型及下面的函数模型,用变量下标的变化来表示相应约束条件(可以通过找规律归纳出下标的表达式,便于用循环编程)

[x,fval]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub);

在这里插入图片描述
在这里插入图片描述
式子中, f , x , i n t c o n , b , b e q , l b , u b f,x,intcon,b,beq,lb,ub f,x,intcon,b,beq,lb,ub为列向量; A , A e q A,Aeq A,Aeq为矩阵。
例题:
已知指派问题矩阵:
在这里插入图片描述
解析:将二维决策变量变成一维决策变量。

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,fval]=intlinprog(c,intcon,[],[],a,b,lb,ub);
x=reshape(x,[5,5]);
disp(fval);
参考文献

[1]司守奎,孙玺菁. 数学建模算法与应用. 北京:国防工业出版社,2011.

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值