整数规划

整数规划2、整数规划2.1定义规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。2.2分类变量全限制为整数时,称纯(完全)整数规

大家好,又见面了,我是你们的朋友全栈君。

2、整数规划

2.1 定义

规划中的变量 (部分或全部) 限制为整数时, 称为整数规划。 若在线性规划模型中,变量限制为整数,则称为整数线性规划。

2.2 分类

  1. 变量全限制为整数时,称纯(完全)整数规划。
  2. 变量部分限制为整数的,称混合整数规划。

2.3 整数规划特点

1、原线性规划有最优解, 当自变量限制为整数后, 其整数规划解出现下述情况:

  • 原线性规划和整数规划的最优解一致
  • 整数规划无可行解
  • 有可行解(但不是最优解)

2、整数规划最优解不能按照实数最优解简单取整而获得

2.4 求解的方法

  1. 分枝定界法—可求纯或混合整数线性规划
  2. 割平面法—可求纯或混合整数线性规划
  3. 隐枚举法—求解“0-1”整数规划:
    1. 过滤隐枚举法;
    2. 分枝隐枚举法。
  4. 匈牙利法—解决指派问题
  5. 蒙特卡洛法—求解各种类型规划

2.5 分枝定界法

对有约束条件的最优化问题 (其可行解为有限数) 的所有可行解空间恰当地进行系统搜索,这就是分枝与定界内容。把全部可行解空间反复地分割为越来越小的子集,称为分枝。对每个子集内的解集计算一个目标下界(对于最小值问题) ,这称为定界。

在每次分枝后, 凡是界限超出已知可行解集目标值的那些子集不再进一步分枝,这样,许多子集可不予考虑,这称剪枝。这就是分枝定界法的主要思路。

例 1

image-20210806094819554

解:

1、先不考虑整数限制,直接按照线性规划求解,将此线性规划问题视为 B,得

image-20210806094915135

再取 x1 = x2 = 0,得到 z 为 0,那么,以上便可求出可行解 z 的上下界

image-20210806095018180

2、任选 x1 和 x2 进行分枝,取 x1 <= 4,x1 >= 5

image-20210806095133626

可得

image-20210806095152972

对 z 再定界,有

image-20210806095211902

3、对 x2 进行分枝,取 x2 <= 2,x2 >= 3,有

image-20210806095306402

再定界,有

image-20210806095322119

4、若再对 x2 以 1 进行分支定界,无可行解,那么,可推断,最优解为

image-20210806095357594

2.6 0 – 1 整数规划

0-1 整数规划指的是变量 xj 仅能取 0 或 1,即

image-20210806101154369

2.6.1 投资场所的选定——相互排斥的计划

题目描述:某公司拟在市东、西、南三区建立门市部。拟议中有 7 个位置 Aj(j = 1, 2, 3…7)可供选择,规定

image-20210806102220473

Aj 点的投资为 bj 元,每年利润为 cj 元,投资总额不能超过 B 元,问如何选择可使年利润最大?

解:

引入变量 xj,令

image-20210806102343612

那么问题可写为

image-20210806102407838

2.6.2 互斥问题的约束条件

1、

image-20210806102744164

可写为

image-20210806102754508

M 为充分大的数

2、

image-20210806102959383

可写为

image-20210806103010156

2.6.3 固定费用的问题

例 2

某工厂为了生产某种产品,有三种方式可供选择:

  • xj 表示采用第 j 种方式生产时的产量
  • cj 表示第 j 种方式生产时的变动成本
  • kj 表示第 j 种方式生产时的固定成本

要求最小化生产成本。

解:

第 j 种生产方式的总成本为

image-20210806103428045

引入 0 – 1 变量 yj,为

image-20210806103827285

于是目标函数为

image-20210806103644162

对于(3)式的规定,可改写为

image-20210806103844056

前者和后者分别为充分小和充分大的数

2.7 0 – 1 整数规划的解法

2.7.1 过滤隐枚举法

穷举法是最容易想到的一种方法,但是计算量太大,因此设计一种仅检查变量取值的组合的一部分,称为过滤隐枚举法。分枝定界法也为过滤隐枚举法的一种。

例 3

image-20210806104303858

解题思路:

  1. 先取一个可行解,例如 (x1, x2, x3) = (1, 0, 0),可行解 z = 3
  2. 因为求的是最大值,因此求解过程中凡是 z < 3 的值均不考虑
  3. 改进过滤条件,抬高过滤门槛

2.8 蒙特卡洛法(随机取样法)

前面讲的是线性整数规划,接下来说明非线性整数规划的问题,当数据量很大时,采用穷举法得到最优解不符合现实,但是应用概率理论可以证明,在一定的计算量的情况下,完全可以得出一个满意解。

例 4

image-20210806104639343

解:

若采用穷举法,共 1010 个点,可随机分析 106 便可达到最优。

mente.m 如下:目标函数 f ,约束向量函数 g

image-20210806104920420

mainint.m 如下:

image-20210806105110741

image-20210806105548981

上面代码中 sum(g <= 0) == 4 的原因是题目中 4 个约束条件需全部满足。

2.9 指派问题的计算机求解

采用 0 – 1 整数规划求解,使用到的 MATLAB 函数为 bintprog

例 5

image-20210806105905970

解:

MATLAB 程序如下:

image-20210806110308718

解得

image-20210806110339411

bintprog 函数说明如下:参考 https://www.jianshu.com/p/9ad0f6d0a7df

  • x = bintprog(f)
  • x = bintprog(f, A, b)
  • x = bintprog(f, A, b, Aeq, beq)

x 是解向量,f 是矩阵系数

A是一个矩阵,b是一个向量

  • A,b和变量x={x1,x2,…,xn}一起,表示了线性规划中不等式约束条件
  • A,b是系数矩阵和右端向量。
  • Aeq和Beq表示了线性规划中等式约束条件中的系数矩阵和右端向量。

例 6

求 max=193x1+191x2+187x3+186x4+180x5+185x6;

st.
x5+x6>=1;

x3+x5>=1;

x1+x2<=1;

x2+x6<=1;

x4+x6<=1;

x1+x2+x3+x4+x5+x6=1;

解:

f=[-193;-191;-187;-186;-180;-185;];
a=[0 0 0 0 -1 -1;0 0 -1 0 -1 0;1 1 0 0 0 0;0 1 0 0 0 1;0 0 0 1 0 1];
b=[-1,-1,1,1,1]';
aeq=[1 1 1 1 1 1];
beq=[3];
x=bintprog(f,a,b,aeq,beq)

2.10 生产与销售计划问题

2.10.1 问题描述

某公司用两种原油( A和B )混合加工成两种汽油(甲和乙) 。甲、乙两种汽油含 A 原油的最低比例分别为 50%和 60%,每吨售价分别为 4800 元和 5600 元。该公司现有原油 A和B 的库存量分别为 500 吨和 1000 吨, 还可以从市场上买到不超过 1500吨的原油 A。原油 A的市场价为:购买量不超过 500 吨时的单价为 10000 元/吨;购买量超过 500 吨单不超过 1000 吨时,超过 500 吨的部分 8000 元/吨;购买量超过 1000 吨时,超过 1000 吨的部分 6000 元/吨。该公司应如何安排原油的采购和加工。

2.10.2 模型

设购买的 A 为 x 吨,那么支出 c(x) 为

image-20210806111840101

设 A 用于生产甲、乙的数量分别为 x11,x12,B 用于生产甲、乙的数量分别为 x21,x22,那么利润为

image-20210806111959861

限制条件为

image-20210806112028986

2.10.3 模型化简

解法一

将 x 分解为三个量 x1,x2,x3,分别表示采集 10 千元/吨、8 千元/吨、6 千元/吨的 A 的数量,那么

image-20210806112306898

image-20210806112312747

目标函数变为

image-20210806112416101

注意,只有当 x1 = 500 时,才可以 8 千元/吨的价格购买 x2,也就是

image-20210806112521902

同理,只有当 x2 = 500 时,才可以 10 千元/吨的价格购买 x3,也就是

image-20210806112553684

image-20210806112602487

解法二

引入 0 – 1 问题,z1 =1,z2 =1,z3 =1 表示以 6 千元/吨、8 千元/吨、10 千元/吨的价格采购 A,上述问题转化为

image-20210806113054310

image-20210806113101581

解法三

成本函数的曲线为

image-20210806113213998

分别记 b1 = 0,b2 = 500,b3 = 1000,当 x 属于第一个小区时,

image-20210806143750351

image-20210806143806313

同理,当 x 属于第二个小区时,

image-20210806143823181

当 x 属于第三个小区时

image-20210806143839473

image-20210806143846119

当 x 属于第 k 个小区时, zk = 1,否则 zk = 0,那么

image-20210806143916712

image-20210806143943260

image-20210806144004005

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154261.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python小波变换 wavedec2函数 各个返回值详解「建议收藏」

    python小波变换 wavedec2函数 各个返回值详解「建议收藏」    网上找了好多文章都没有提到这个东西,没有说明wavedec2函数各个返回值究竟是什么意思   &nbs

    2022年7月3日
    33
  • java游戏激活成功教程版盒子,37游戏盒子-37游戏盒子最新版 v4.0.0.4 官方版[通俗易懂]

    java游戏激活成功教程版盒子,37游戏盒子-37游戏盒子最新版 v4.0.0.4 官方版[通俗易懂]37游戏盒子37游戏盒子最新版是一款提供游戏下载辅助软件。37游戏盒子最新版内置海量游戏而且不断更新,让玩家不必到处找游戏。而且还会自动去检测游戏所需要的软件和硬件环境,玩家只需轻松一点,就可以实现游戏的下载、安装、运行全部过程。37游戏盒子最新版特色说明:1、内置海量游戏,不断更新,不必到处找游戏。2、只需轻松一点,实现游戏的下载、安装、运行,减少用户麻烦,节省玩家时间。3、斥资千万,全新搭建智…

    2022年7月7日
    145
  • import java.io 是什么意思_Java IO 详解

    import java.io 是什么意思_Java IO 详解JavaIO详解初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂。而且没有结合到java7的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见。首先看个图:(如果你也是初学者,我相信你看了真个人都不好了,想想java设计者真是煞费苦心啊!)这是javaio比较基本的一些处理流,除此之外我们还会提到一些比较深入的基于i…

    2022年6月7日
    29
  • 字符串的匹配算法_多字符串匹配

    字符串的匹配算法_多字符串匹配目录需求基础知识逻辑解析源码实现需求先简单描述溪源曾经遇到的需求:需求一:项目结果文件中实验结论可能会存在未知类型、转换错误、空指针、超过索引长度等等。这里是类比需求,用日常开发中常出现的错误类型作为需求,如果要以上结论则判断这个项目检测失败;解决方案一:大家常用的方式可能是if(){continue;}esleif(){continue;}…或者switch-case等;方案二:可能会使用集合contain()方法;方案三:依次匹配字符串中字符(暴力匹配);以上两种方案都能解决;然

    2022年8月21日
    1
  • Scripting.FileSystemObject对象

    Scripting.FileSystemObject对象Setfso=Server.CreateObject(“Scripting.FileSystemObject”)定义FSO对象fso.CreateFolder(Server.MapPath(folder))得到路径Setfout=fso.CreateTextFile(Server.MapPath(filepath))定义创建对象fout.WriteLinemb

    2022年7月14日
    10
  • ftp 发生意外错误 0x8ffe2740

    ftp 发生意外错误 0x8ffe2740一般是由端口被占用造成的可以修改端口号解决转载于:https://www.cnblogs.com/xyangs/archive/2012/06/18/2553231.html

    2022年7月26日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号