【数学建模】day02-整数规划

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

目前通用的解法适合整数线性规划。不管是完全整数规划(变量全部约束为整数),还是混合整数规划(变量既有整数又有实数),MATLAB都提供了通用的求解函数。

 

 

一、0-1型整数规划

这类规划将变量限制为0和1,有时候多个规划问题可以通过引入0-1变量将问题统一在一个规划问题中讨论。例如:

拥有相互排斥的规划约束:

image

一般的,

image

 

 

二、0-1整数规划的一个解法:隐枚举法

因为变量的取值是取0-1的,所以可以枚举所有取值求得极大/极小值。例如,求解

image

(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实现:

 

1 clc,clear
2  x = unifrnd(0,12,1,10000000);
3  y = unifrnd(0,9,1,10000000);
4  pinshu = sum(y<x.^2 & x<=3) + sum(x>3 & y <12-x);
5  area = pinshu/10000000*12*9;
6  area

 

image

 

 

(2)一个非线性规划蒙特卡洛求解实例

image

使用:产生随机数种子:为了防止相同状态开始会产生相同的伪随机数(特别是程序中有loop)1. rand('state',sum(100*clock)):根据当前时间,已经不推荐使用2. rand('twister',mod(floor(now*8640000),2^31-1)):也可以3. rng命令

注:

image

 

实现:

先定义函数:

 1 function [f,g] = mente(x)
 2  f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)-8*x(1)-2*x(2)-3*x(3)
 3 
 4 -x(4)-2*x(5); 
 5  g=[sum(x)-400 
 6 
 7 x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800 
 8 
 9 2*x(1)+x(2)+6*x(3)-200 
10 
11 x(3)+x(4)+5*x(5)-200]; 

 再求解:

 1 clc,clear
 2  rand('state',sum(clock));
 3  p0 = 0;
 4  tic
 5  for i = 1:10^6
 6      x = 99*rand(5,1); %rand(5,1)生成5行1列0-1上的均匀分布随机数
 7      x1 = floor(x);
 8      x2 = ceil(x);
 9      [f,g] = mente(x1);
10      if sum(g<=0) == 4
11          if p0 <= f
12              x0 = x1;
13              p0 = f;
14          end
15      end
16      [f,g] = mente(x2);
17      if sum(g<=0)==4
18          if p0<=f
19              x0 = x2;
20              p0 = f;
21          end
22      end
23  end
24  x0
25  p0
26  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)求解指派问题:已知指派矩阵为

image

 1 clc,clear
 2  c = [3 8 2 10 3;
 3      8 7 2 9 7;
 4      6 4 2 7 5;
 5      8 4 2 3 5;
 6      9 10 6 9 10];
 7  c = c(:);
 8  a = zeros(10,25);
 9  intcon = 1:25;
10  for i = 1:5   
11  %这是把二维矩阵转换成一维,要满足一个人只做一个任务,一个任务只被一个人做的等式条件,共5*2个条件
12       a(i,(i-1)*5+1:5*i)=1;    
13       a(5+i,i:5:25)=1; 
14  end
15  b = ones(10,1);
16  lb = zeros(25,1);
17  ub = ones(25,1);
18  [x,y] = intlinprog(c,intcon,[],[],a,b,lb,ub);
19  x = reshape(x,[5,5])

 

 

image

 

也就是相应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

求解:

 

 1 clc,clear
 2  f = [-3;-2;-1];
 3  A = [1,1,1];
 4  b = 7;
 5  Aeq = [4,2,1];
 6  beq = 12;
 7  lb = zeros(3,1);
 8  ub = [inf;inf;1];
 9  intcon = 3;
10  [x,y] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub);
11  x
12  y


 

image

image

 

 

转载于:https://www.cnblogs.com/duye/p/9327955.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

那年的夏天很笛子

原文&#xff1a;salance-moon.spaces.live.com在某个阶段&#xff0c;我想应该是时候把至今为止影响自己走上美工&设计&程序之路的历程整理一下了。但是下笔的时候才发现&#xff0c;其实这几乎成了我童年的回忆录&#xff0c;因为程序暂且不算&#xff0c;美工&设…

python数据的格式输出_python

本文主要由Python String Format 一文翻译整理而来&#xff0c;在python中使用 % 进行格式化字符串由来已久&#xff0c;不过在python2.7 的版本中引入了新的格式化字符串的方法。虽然%号的方式依旧可用&#xff0c;不过在[PEP-3101] 中已有含蓄的警告称将完全淘汰python2.6之前…

[kafka]kafka集群实践

环境 iphostnameserver_id192.168.1.111UAT042192.168.1.112UAT031192.168.1.102UAT053配置hosts: 192.168.1.112 UAT03 192.168.1.111 UAT04 192.168.1.102 UAT05 安装jdk # rpm -ivh jdk-8u65-linux-x64.rpm # java -version java version "1.8.0_65" Java(TM) SE …

互联网盈利模式77种创新 【 很八股的标题,不过内容还是可以参考一下的 】

http://it.icxo.com/htmlnews/2006/05/26/854682.htm当整个世界都在为互联网喝彩的时候&#xff0c;人们心中往往都会进行这样的思考--我怎样才能在互联网上获得财富&#xff1f;其实&#xff0c;这个问题是没有人能够回答的&#xff0c;因为可以回答的人正在为获得财富忙得不可…

.gitignore文件_Java小白入门,Git忽略文件.gitignore详解

在工程中&#xff0c;并不是所有文件都需要保存到版本库中的&#xff0c;例如“target”目录及目录下的文件就可以忽略。在Git工作区的根目录下创建一个特殊的.gitignore文件&#xff0c;然后把要忽略的文件名填进去&#xff0c;Git就会自动忽略这些文件或目录。Git 忽略规则优…

Xamarin Essentials教程磁力计Magnetometer

Xamarin Essentials教程磁力计Magnetometer磁力计也叫地磁、磁感器&#xff0c;可用于测试磁场强度和方向。在手持设备中&#xff0c;通过磁力计可以计算设备的左右、前后倾斜角度&#xff0c;广泛应用于手机各种的应用中。在Xamarin中&#xff0c;开发者可以使用Xamarin.Essen…

python 字符串截取_Python 字符串操作实现代码(截取/替换/查找/分割)

Python 截取字符串使用 变量[头下标:尾下标]&#xff0c;就可以截取相应的字符串&#xff0c;其中下标是从0开始算起&#xff0c;可以是正数或负数&#xff0c;下标可以为空表示取到头或尾。 # 例1&#xff1a;字符串截取 str 12345678 print str[0:1] >> 1 # 输出str位…

VMware的linux虚拟机实现和windows的文件共享

使用的centos7和windows10&#xff0c;在虚拟机centos7中是root身份。由于是第一次用没有界面的linux&#xff0c;可谓是困难重重…… 一 打开VMware&#xff0c;然后选中你的虚拟机&#xff0c;我的是centos7。然后点击工具栏”虚拟机“&#xff0c;然后选择”安装VMware tool…

XYZ DOWN-电子书

分享一下我老师大神的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到我们人工智能的队伍中来&#xff01;https://blog.csdn.net/jiangjunshowC Primer 中文第三版 http://dl5.mydown.com/test/ziliao/at2004…

通汇手机为何卖得那么红火

分享一下我老师大神的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到我们人工智能的队伍中来&#xff01;https://blog.csdn.net/jiangjunshow通汇手机连锁去年销量又高居粤西地区榜首通汇手机为何卖得那么红…

OpenCV+3计算机视觉++Python语言实现+第二版pdf

下载地址&#xff1a;网盘下载 OpenCV 3是一种先进的计算机视觉库&#xff0c;可以用于各种图像和视频处理操作&#xff0c;通过OpenCV 3 能很容易地实现一些有前景且功能先进的应用&#xff08;比如&#xff1a;人脸识别或目标跟踪等&#xff09;。理解与计算机视觉相关的算法…

javascript进制转换_「js基础」JavaScript逻辑和位运算符归纳

上一篇文章呢&#xff0c;我们讲述了JavaScript运算符中的关系运算符和逻辑运算符&#xff0c;那么紧接上一篇的文章我们今天来说说逻辑运算符。引言逻辑运算符不是很难&#xff0c;也不是很多&#xff0c;我们只要记住三个就可以啦&#xff01;分别是&#xff1a;&#xff01;…

〖强暴贴〗号称全国最大开发者网络的CSDN多次出现低级错误 验证码形同虚设 开发人员竟是MVP

分享一下我老师大神的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到我们人工智能的队伍中来&#xff01;https://blog.csdn.net/jiangjunshow主  题&#xff1a;【醒目】〖强暴贴〗号称全国最大开发者网络…

MySQL系统自带的数据库information schema

转自&#xff1a;https://www.cnblogs.com/shengdimaya/p/6920677.html#commentform information_schema数据库是MySQL系统自带的数据库&#xff0c;它提供了数据库元数据的访问方式。感觉information_schema就像是MySQL实例的一个百科全书&#xff0c;记录了数据库当中大部分我…

micropython oled中文_micropython中怎么将gb2312编码的字节流变成中文

展开全部 # -*- code: utf-8 -*- # 在 micropython 中运行, 注意在运行目录下有 hzk12/16 # 啊 是汉字区第1个汉字&#xff0c;62616964757a686964616fe59b9ee7ad9431333431353932对应数据为 ?不对&#xff1f; # 0x00, 0x00, 0x0E, 0xFC, 0xEA, 0x08, 0xAA, 0x08, # 0xAA, 0x…

DOS那一代的程序员现在都干嘛呢

分享一下我老师大神的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到我们人工智能的队伍中来&#xff01;https://blog.csdn.net/jiangjunshow亿友论坛-DOS那一代的程序员现在都干嘛呢&#xff1f;&#xff0…

弟子规python编程游戏_《Python游戏趣味编程》 第11章 消灭星星

知乎视频​www.zhihu.com图书简介可以看这里&#xff1a;童晶&#xff1a;《Python游戏趣味编程》新书上架了​zhuanlan.zhihu.com消灭星星是一款非常容易上瘾的消除类游戏&#xff0c;只需点击一个方块&#xff0c;如果和其连接的有两个或两个以上颜色相同的方块即可消除&…

python判断英文字母_python判断字符串中是否含有英文 | 个人学习笔记记录

第一种方法&#xff1a; #-*- coding:utf-8 -*- import re def check(str): my_re re.compile(r[A-Za-z],re.S) res re.findall(my_re,str) if len(res): print u含有英文字符 else: print u不含有英文字符 if __name__ __main__: str 你好123hello check(str) str1 你好1…

idea ssm项目移包报错问题

写完代码之后发现包结构太乱了 想要规划一下 结果报错 这里面的包路径都可以点进去&#xff0c;还是报找不到com.lf.company.entity.Business 后来发现是 在移动前和移动后都存在这个mapper。xml 解决方案&#xff1a; 在这里把多余的删掉转载于:https://www.cnblogs.com/NCL…

matlab 写excel 慢_吐槽一下MATLAB的workspace

用MATLAB编程&#xff0c;或者Simulink建模仿真&#xff0c;有一个特别强大、特别人性化的功能&#xff0c;可以在workspace中直接查看定义的参数和运行的结果 无论是仿真的调试&#xff0c;结果的分析&#xff0c;或是中途的Debug&#xff0c;workspace都发挥着至关重要的作用…