【数学建模】day02-整数规划
基本类似于中学讲的整数规划--线性规划中变量约束为整数的情形。
目前通用的解法适合整数线性规划。不管是完全整数规划(变量全部约束为整数),还是混合整数规划(变量既有整数又有实数),MATLAB都提供了通用的求解函数。
一、0-1型整数规划
这类规划将变量限制为0和1,有时候多个规划问题可以通过引入0-1变量将问题统一在一个规划问题中讨论。例如:
拥有相互排斥的规划约束:
一般的,
二、0-1整数规划的一个解法:隐枚举法
因为变量的取值是取0-1的,所以可以枚举所有取值求得极大/极小值。例如,求解
(1)试探一个可行解(x1,x2,x3)=(1,0,0),相应的目标函数值是3。暂做最优解。
(2)继续试探其他可行解。倘若目标函数值小于3则不考虑,这相当于增加了目标大于等于3的又一个约束。否则目标函数值大于3,则新的可行解暂做最优解,更新当前最优目标函数值,重复(2)。
(3)直到:枚举完所有可行解。
三、固定费用问题
举例说明这类问题是:有三种产品投资方式,相应增加A产品投资会使得A的固定成本上升,而由于产品产量增加使得单个产品费用下降,问如何投资使得成本最低。
解决这个问题的一个方法可以是:列成本函数,引入0-1变量统一到一个规划问题中。具体求解不赘述。
四、非线性整数规划的一个方法:蒙特卡洛法
尽管整数规划由于限制变量为整数而增加了难度;然而又由于整数解是有限个,于是为枚举法提供了方便。
当然,当自变量维数很大和取值范围很宽情况下,企图用显枚举法(即穷举法)计算出优值是不现实的,但是应用概率理论可以证明,在一定的计算量的情况下(这里指蒙特卡罗法随机抽取可行点求解近似解),完全可以得出一个满意解。
所谓蒙特卡洛法(随机取样),是指对于计算量过大的问题,通过随机取样计算部分,而非整体,来降低计算量的方法。这通常是近似解,但概率统计的方法证明,这是可靠的。
蒙特卡洛的应用实例。
(1)计算面积:计算y=x^2,y=12-x与x轴在第一象限围城的曲边三角形的面积。
方法:利用蒙特卡罗法。在矩形(0,0),(0,9),(12,9),(12,0)中随机生成n个点,统计落在曲边三角形内的点个数,计算频度即为曲边三角形与矩形的面积之比。
使用 matlab生成一维均匀分布随机数: R = unifrnd(A,B):生成区间(A,B)内的随机数,A,B可以是向量。 R = unifrnd(A,B,M,N):生成区间(A,B)内的M*N个随机数。 R = unifrnd(A,B,[M,N]):同上。 生成二维均匀分布随机数则由一维组合而成。matlab实现:
clc,clear
x = unifrnd(,,,);
y = unifrnd(,,,);
pinshu = sum(y<x.^ & x<=) + sum(x> & y <-x);
area = pinshu/**;
area
(2)一个非线性规划蒙特卡洛求解实例
使用: 产生随机数种子:为了防止相同状态开始会产生相同的伪随机数(特别是程序中有loop) . rand('state',sum(*clock)):根据当前时间,已经不推荐使用 . rand('twister',mod(floor(now*),^-)):也可以 . rng命令注:
实现:
先定义函数:
function [f,g] = mente(x)
f=x()^+x()^+*x()^+*x()^+*x()-*x()-*x()-*x() -x()-*x();
g=[sum(x)- x()+*x()+*x()+x()+*x()- *x()+x()+*x()- x()+x()+*x()-];再求解:
clc,clear
rand('state',sum(clock));
p0 = ;
tic
for i = :^
x = *rand(,); %rand(,)生成5行1列0-1上的均匀分布随机数
x1 = floor(x);
x2 = ceil(x);
[f,g] = mente(x1);
if sum(g<=) ==
if p0 <= f
x0 = x1;
p0 = f;
end
end
[f,g] = mente(x2);
if sum(g<=)==
if p0<=f
x0 = x2;
p0 = f;
end
end
end
x0
p0
toc五、指派问题
分配n人去做n个任务,每人做且只做一项任务。第i个人做第j项任务,花费cij时间。问如何分配人去做任务,使得总时间花费最少。
可以看出,花费cij构成矩阵,称为指派矩阵。引入0-1变量矩阵n*n,则该矩阵每行每列只有一个1,其余为0,为1代表i做任务j,转化为一个整数规划问题。
匈牙利算法可解。
六、整数规划的matlab通用解法
函数:
[x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
param:
f:目标函数系数列向量
intcon:整数变量的地址,如变量有x1,x2,x3,若x2,x3为整数变量,则intcon = 2:3
A,b对应不等约束
Aeq,beq对应等式约束
lb,ub对应边界约束
return:
x:取得最优值的对应变量取值
fval:最优值。同理,这是求标准型即min,若求max则目标函数求反
求解实例:
(1)求解指派问题:已知指派矩阵为
clc,clear
c = [ ;
;
;
;
];
c = c(:);
a = zeros(,);
intcon = :;
for i = :
%这是把二维矩阵转换成一维,要满足一个人只做一个任务,一个任务只被一个人做的等式条件,共5*2个条件
a(i,(i-)*+:*i)=;
a(+i,i::)=;
end
b = ones(,);
lb = zeros(,);
ub = ones(,);
[x,y] = intlinprog(c,intcon,[],[],a,b,lb,ub);
x = reshape(x,[,])
也就是相应C矩阵,取xij1则对应i做任务j。
(2)求解混合整数规划问题
min z = –3x1 –2x2 – x3
s.t.
x1 + x2 + x3 <=7,
4x1 + 2x2 + x3 =12,
x1,x2 >=0
x3 = 0或1
分析知,只有x3是0-1整数变量,则intcon = 3
求解:
clc,clear
f = [-;-;-];
A = [,,];
b = ;
Aeq = [,,];
beq = ;
lb = zeros(,);
ub = [inf;inf;];
intcon = ;
[x,y] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub);
x
y
【数学建模】day02-整数规划的更多相关文章
- Python小白的数学建模课-04.整数规划
整数规划与线性规划的差别只是变量的整数约束. 问题区别一点点,难度相差千万里. 选择简单通用的编程方案,让求解器去处理吧. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛达 ...
- BITED数学建模七日谈之二:怎样阅读数学模型教材
今天进入我们数学建模七日谈的第二天:怎样阅读数学建模教材? 大家再学习数学建模这门课程或准备比赛的时候,往往都是从教材开始的,教材的系统性让我们能够很快,很深入地了解前人在数学模型方面已有的研究成果, ...
- 【数学建模】线性规划各种问题的Python调包方法
关键词:Python.调包.线性规划.指派问题.运输问题.pulp.混合整数线性规划(MILP) 注:此文章是线性规划的调包实现,具体步骤原理请搜索具体解法. 本文章的各个问题可能会采用多种调用方 ...
- Python数学建模-01.新手必读
Python 完全可以满足数学建模的需要. Python 是数学建模的最佳选择之一,而且在其它工作中也无所不能. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数学 ...
- Python数学建模-02.数据导入
数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数据导入 ...
- Python小白的数学建模课-A1.2021年数维杯C题(运动会优化比赛模式探索)探讨
Python小白的数学建模课 A1-2021年数维杯C题(运动会优化比赛模式探索)探讨. 运动会优化比赛模式问题,是公平分配问题 『Python小白的数学建模课 @ Youcans』带你从数模小白成为 ...
- Python小白的数学建模课-03.线性规划
线性规划是很多数模培训讲的第一个算法,算法很简单,思想很深刻. 要通过线性规划问题,理解如何学习数学建模.如何选择编程算法. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛 ...
- Python小白的数学建模课-05.0-1规划
0-1 规划不仅是数模竞赛中的常见题型,也具有重要的现实意义. 双十一促销中网购平台要求二选一,就是互斥的决策问题,可以用 0-1规划建模. 小白学习 0-1 规划,首先要学会识别 0-1规划,学习将 ...
- Python小白的数学建模课-A3.12 个新冠疫情数模竞赛赛题与点评
新冠疫情深刻和全面地影响着社会和生活,已经成为数学建模竞赛的背景帝. 本文收集了与新冠疫情相关的的数学建模竞赛赛题,供大家参考,欢迎收藏关注. 『Python小白的数学建模课 @ Youcans』带你 ...
- Python小白的数学建模课-06 固定费用问题
Python 实例介绍固定费用问题的建模与求解. 学习 PuLP工具包中处理复杂问题的快捷使用方式. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛达人. 前文讲到几种典型 ...
随机推荐
- 调整代码生成工具Database2Sharp的Winform界面生成,使其易于列表工具栏的使用。
在Winform界面开发的时候,有时候我们客户喜欢把功能放在列表界面的顶部,这样界面和功能整齐放置,也是一种比较美观的方式,基于这种方式的考虑,改造了代码生成工具的Winform界面生成规则,把增删改 ...
- Spring Boot 2.0(八):Spring Boot 集成 Memcached
Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站 ...
- win 2008 R2 或以上版本,只有C盘情况下,PHP上传文件,显示不了解决办法
主要问题:因为没权限 解决办法:给C:\Windows\Temp 加上IIS账户读写权限
- Westore 1.0 正式发布 - 小程序框架一个就够
世界上最小却强大的小程序框架 - 100多行代码搞定全局状态管理和跨页通讯 Github: https://github.com/dntzhang/westore 众所周知,小程序通过页面或组件各自的 ...
- webpack打包经验——处理打包文件体积过大的问题
前言 最近对一个比较老的公司项目做了一次优化,处理的主要是webpack打包文件体积过大的问题. 这里就写一下对于webpack打包优化的一些经验. 主要分为以下几个方面: 去掉开发环境下的配置 Ex ...
- flask异常处理
对于异常,通常可以分为两类:一类是可以预知的异常,我们通常会用try...except....捕捉,第二类是未知的error,我们是无法预知的. try: code block except A: e ...
- PS调出春夏外景婚纱照
效果图 先来看看原图和夏季的效果图 先看看原图 教程终于来咯 原图暗部太深,需要将暗部提亮.可以把暗部选区选出来.为了精确选择暗部选区,我利用计算命令如上图所示.最后得到暗部的选区. 上图得到了暗部选 ...
- Spring AOP详细介绍
AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子. 一 AOP的基本概念 (1)Asp ...
- PHP PSR代码规范
转载: https://www.awaimai.com/916.html PSR是PHP通用性框架小组 (PHP Framework Interop Group) 制定的PHP代码编写格式规范,是PH ...
- PHP的优化建议(仅借鉴)
转载: https://www.awaimai.com/1050.html 1 字符串 1.1 少用正则表达式 能用PHP内部字符串操作函数的情况下,尽量用他们,不要用正则表达式, 因为其效率高于正则 ...