整数规划

整数规划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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • NumPy-读写文件「建议收藏」

    NumPy-读写文件「建议收藏」读写文件NumPy文件读写主要有二进制的文件读写和文件列表形式的数据读写两种形式(1)save函数是以二进制的格式保存数据。  格式:  np.save("./save_arr",arr1)(2)load函数是从二进制的文件中读取数据。  格式:  np.load("./save_arr.npy")(3)savez函数可以将多个数组保存到一个文件中。  …

  • S3C2440C语言点灯[通俗易懂]

    S3C2440C语言点灯[通俗易懂]第一代程序员使用机器码第二代程序员使用汇编第三代程序员使用C语言C语言相较于汇编和机器码是一个更高级的语言,我们使用的技术也应该与时俱进之前控制寄存器是配置GPFCON和GPFDAT寄存器,通过地址访问,所以可以用C语言来进行对地址的访问。GPFCON——0x5600,0050GPFDAT——0x5600,0054目录S3C2440芯片手册导读用指针表示S3C2440芯片手册导读对于GPFCON,只用到了16位对于GPFDAT,只用到了8位我们仍然可以以32位,就是4字节的

  • 火狐破解收费hackbar「建议收藏」

    火狐破解收费hackbar「建议收藏」https://blog.csdn.net/qq_38963246/article/details/95489242

  • 实战模拟│JWT 登录认证「建议收藏」

    实战模拟│JWT 登录认证「建议收藏」分布式跨域认证的解决新方案

  • 《Android应用开发揭秘》连载3

    《Android应用开发揭秘》连载3《Android应用开发揭秘》  书名:Android应用开发揭秘作者:杨丰盛出版社:机械工业出版社ISBN:9787111291954出版日期:2010年3月(1版2次)开本:16页码:515版次:1-2定价:69元豆瓣网讨论地址:http://www.douban.com/subject/4200822/China-pub预订地址:http://www.china-pub.

  • mysql 全文索引无效_为什么MySQL全文索引不起作用?

    mysql 全文索引无效_为什么MySQL全文索引不起作用?在尝试了我能做的一切之后,我终于创建了这个测试表:CREATETABLEtest_table(idint(11)NOTNULLAUTO_INCREMENT,titletextNOTNULL,PRIMARYKEY(id),FULLTEXTKEYtitle(title))ENGINE=MyISAMDEFAULTCHARSET=utf8使用以下测试数据:INSERT…

发表回复

您的电子邮箱地址不会被公开。

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