基本类似于中学讲的整数规划--线性规划中变量约束为整数的情形。

目前通用的解法适合整数线性规划。不管是完全整数规划(变量全部约束为整数),还是混合整数规划(变量既有整数又有实数),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-整数规划的更多相关文章

  1. Python小白的数学建模课-04.整数规划

    整数规划与线性规划的差别只是变量的整数约束. 问题区别一点点,难度相差千万里. 选择简单通用的编程方案,让求解器去处理吧. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛达 ...

  2. BITED数学建模七日谈之二:怎样阅读数学模型教材

    今天进入我们数学建模七日谈的第二天:怎样阅读数学建模教材? 大家再学习数学建模这门课程或准备比赛的时候,往往都是从教材开始的,教材的系统性让我们能够很快,很深入地了解前人在数学模型方面已有的研究成果, ...

  3. 【数学建模】线性规划各种问题的Python调包方法

    关键词:Python.调包.线性规划.指派问题.运输问题.pulp.混合整数线性规划(MILP) 注:此文章是线性规划的调包实现,具体步骤原理请搜索具体解法.   本文章的各个问题可能会采用多种调用方 ...

  4. Python数学建模-01.新手必读

    Python 完全可以满足数学建模的需要. Python 是数学建模的最佳选择之一,而且在其它工作中也无所不能. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数学 ...

  5. Python数学建模-02.数据导入

    数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数据导入 ...

  6. Python小白的数学建模课-A1.2021年数维杯C题(运动会优化比赛模式探索)探讨

    Python小白的数学建模课 A1-2021年数维杯C题(运动会优化比赛模式探索)探讨. 运动会优化比赛模式问题,是公平分配问题 『Python小白的数学建模课 @ Youcans』带你从数模小白成为 ...

  7. Python小白的数学建模课-03.线性规划

    线性规划是很多数模培训讲的第一个算法,算法很简单,思想很深刻. 要通过线性规划问题,理解如何学习数学建模.如何选择编程算法. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛 ...

  8. Python小白的数学建模课-05.0-1规划

    0-1 规划不仅是数模竞赛中的常见题型,也具有重要的现实意义. 双十一促销中网购平台要求二选一,就是互斥的决策问题,可以用 0-1规划建模. 小白学习 0-1 规划,首先要学会识别 0-1规划,学习将 ...

  9. Python小白的数学建模课-A3.12 个新冠疫情数模竞赛赛题与点评

    新冠疫情深刻和全面地影响着社会和生活,已经成为数学建模竞赛的背景帝. 本文收集了与新冠疫情相关的的数学建模竞赛赛题,供大家参考,欢迎收藏关注. 『Python小白的数学建模课 @ Youcans』带你 ...

  10. Python小白的数学建模课-06 固定费用问题

    Python 实例介绍固定费用问题的建模与求解. 学习 PuLP工具包中处理复杂问题的快捷使用方式. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛达人. 前文讲到几种典型 ...

随机推荐

  1. pip install报错Can't roll back cryptography; was not uninstalled

    当使用pip install或者pip install --upgrade报错 Can't roll back cryptography; was not uninstalled 可以进行以下的尝试: ...

  2. Luogu4745/Gym101620G CERC2017 Gambling Guide 期望、DP、最短路

    传送门--Luogu 传送门--Vjudge 设\(f_x\)为从\(x\)走到\(N\)的期望步数 如果没有可以不动的限制,就是隔壁HNOI2013 游走 如果有可以不动的限制,那么\(f_x = ...

  3. Docker资源限制与Cgroups

    一.Linux control groups 简介     Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如 ...

  4. JVM内存管理的一些思考

    目录 一. 内存是怎么分配的 二. 方法区 三. java对象的生命周期 四. Class对象是在方法区还是堆中 五.java对象的大小 六. 类加载的初始化阶段 七.Class.forName和Cl ...

  5. 【转】AlphaGO Zero 原理

      原文地址:https://www.hhyz.me/2018/08/08/2018-08-08-AlphaGO-Zero/> 1. 概述 简单来说,AlphaGo Zero 的训练可以分为三个 ...

  6. 史上最全的Spring Boot配置文件详解

    Spring Boot在工作中是用到的越来越广泛了,简单方便,有了它,效率提高不知道多少倍.Spring Boot配置文件对Spring Boot来说就是入门和基础,经常会用到,所以写下做个总结以便日 ...

  7. 解决在ubuntu上启动的django项目在windows进行访问无法访问的问题

    windows想要访问VMware中Ubuntu Server中Debug模式下的django服务,需要设置django允许非本机ip访问. 设置方法:1.查看虚拟机ip(建议VMware中设置Ubu ...

  8. CentOS 7+nginx+PHP+php-fpm

    根据网上资料配置: location ~ \.php$ { #include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index in ...

  9. Linux—CentOS7下python开发环境配置

    CentOS7下python开发环境配置 上一篇博客讲了如何在Centos7下安装python3(https://www.cnblogs.com/zivli/p/9937608.html),这一次配置 ...

  10. js基础语法之函数

    普通函数 function foo(a, b){ return a + b; } foo(10, 20) >>> 30 匿名函数 var f = function(){console ...