算法2—整数规划

这篇具有很好参考价值的文章主要介绍了算法2—整数规划。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 概论

1.1整数规划的定义

规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。(目前求解整数规划方法只是适用整数线性规划)

1.2整数规划的分类

如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类:

1.变量全限制为整数时,称纯(完全)整数规划。

2.变量部分限制为整数
,称混合整数规划。

1.3整数规划的特点

(1)原线性规划有最优解,当自变量限制为整数后,其整数规划会出现:
①原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。
②整数规划无可行解。
整数规划,数学建模,算法,机器学习,matlab,动态规划
③有可行解(当然就存在最优解),但最优解值变差。
整数规划,数学建模,算法,机器学习,matlab,动态规划
(2) 整数规划最优解不能按照实数最优解简单取整而获得。

1.4求解方法的分类

(1)分枝定界法—可求纯或混合整数线性规划。

(2)割平面法—可求纯或混合整数线性规划。

(3)隐枚举法—求解“0-1”整数规划:

①过滤隐枚举法;

②分枝隐枚举法。

(4)匈牙利法—解决指派问题(“0-1”规划特殊情形)。

(5)蒙特卡洛法—求解各种类型规划。

1.5整数线性规划模型

整数线性规划模型为:
整数规划,数学建模,算法,机器学习,matlab,动态规划

2. 分枝定界法

2.1定义

对有约束条件的最优化问题(其可行解为有限)的所有可行解空间恰当地进行系统搜索,这就是分枝与定界内容。分支定界法把全部可行解空间反复地分割为越来越小的子集,称为分枝;并且对每个子集内的解集计算一个目标上界,称为定界。每次分枝后,对于超出已知可行解集目标值的那些子集不再进一步分枝,就可以删减很多子集,这称为剪枝。

2.2解法过程

设有最大化的整数规划问题 A ,与它相应的线性规划为问题 B ,从解问题 B 开始,若其最优解不符合 A 的整数条件,那么 B 的最优目标函数必是 A 的最优目标函数 z* 的上界,记作 z1 ;而 A 的任意可行解的目标函数值将是 z* 的一个下界 z2 。分枝定界法就是将 B 的可行域分成子区域的方法。逐步减小 z1 和增大 z2 ,最终求到 z* .

2.3例题求解
  • 求解整数化规划
    整数规划,数学建模,算法,机器学习,matlab,动态规划
    (1)先不考虑整数规划,求解线性规划B得出最优解:

当x1 = 4.8092, x2 = 1.8168,则最优解 z = 355.8779

所以得出来是问题 A 的最优目标函数值 z* 的上界,记作 z 1。而x1 = 0, x2 = 0 显然是问题 A 的一个整数可行解,这时 z = 0 ,是 z* 的一个下界,记作 z2 , 即0 ≤ z* ≤ 356。

(2) 上述求出来的x1, x2 当前均为非整数,故不满足整数要求,任选一个进行分枝。设选 x1进行分枝,把可行集分成 2 个子集:x1 ≤ [4.8092] = 4, x1 ≥ [4.8092] +1 = 5
因为 4 与 5 之间无整数,故这两个子集的整数解必与原可行集合整数解一致。这一步称为分枝。这两个子集的规划及求解如下:

  • 根据求解出来的最优值来确定z* 的界域

整数规划,数学建模,算法,机器学习,matlab,动态规划

(3)根据求解出来x1的值,由问题B1继续分枝可得
整数规划,数学建模,算法,机器学习,matlab,动态规划

  • 由于x1=4和x2=2是整数解,所以z是B1的可行解,故z11是z*的下界。

(4)由问题B2继续分枝,并将不满足的子集删除
整数规划,数学建模,算法,机器学习,matlab,动态规划

  • 由于其它子集都不满足,只有B11满足,则最优解就是B11
2.4求解步骤

从以上解题过程可得用分枝定界法求解整数规划(最大化)问题的步骤为:
开始,将要求解的整数规划问题称为问题 A ,将与它相应的线性规划问题称为问题 B 。

(i)解问题 B 可能得到以下情况之一:

(a) B 没有可行解,这时 A 也没有可行解,则停止.

(b) B 有最优解,并符合问题 A 的整数条件, B 的最优解即为 A 的最优解,则停止。

(c) B 有最优解,但不符合问题 A 的整数条件,记它的目标函数值为 z1。

(ii)用观察法找问题 A 的一个整数可行解,一般可取 xj = 0, j = 1,L,n ,试探,求得其目标函数值,并记作 z2 。以 z* 表示问题 A 的最优目标函数值;这时有 z2 ≤ z* ≤ z1进行迭代。

第一步:对A分枝,在 B 的最优解中任选一个不符合整数条件的变量 x j ,其值为bj , 以[bj] 表示小于bj 的最大整数。构造两个约束条件xj ≤ [bj] 和 xj ≥ [bj] +1将这两个约束条件,分别加入问题 B ,求两个后继规划问题 B1 和 B2 。

定界,以每个后继问题为一分枝标明求解的结果,与其它问题的解的结果中,找出最优目标函数值最大者作为新的上界 z1。从已符合整数条件的各分支中,找出目标函数值为最大者作为新的下界 z2,若无作用 z2不变。

第二步:比较与剪枝,各分枝的最优目标函数中若有小于 z1 者,则剪掉这枝,即删除不满足的子集。若大于 z1 ,且不符合整数条件,则重复第一步骤。一直到最后得到z* = z1 为止。得最优整数解

3.割平面法

割平面法的基本思路是先求解普通线性规划问题的最优解,再对非整数解添加约束条件使可行域缩小,如此反复求解添加了约束条件的普通线性规划问题,直到得到整数解。

在先不考虑整数约束条件,直接求解松弛问题的最优解,如果满足整数条件就结束了,如果不满足整数条件,就在此非整数解的基础上增加新的约束条件重新求解。这个新增加的约束条件称为割平面,对松弛问题的可行域割一刀,割去松弛问题的部分非整数解。经过有限次的反复切割,必定可在缩小的可行域的一个整数极点上达到整数规划问题的最优解 。

割平面法的计算量比较小,但对问题的结构及求解的要求较高,算法比较复杂。割平面法

  • 1.松弛变量
    不等式约束相对于等式约束来说越说条件更多,有时候不好解决问题
    比如x1+x2<=10
    可以写为x1+x2+x3=10
    只需要x3>=0
    则x3被称为松弛变量

  • 2.剩余变量
    x1+x2>=10
    可以写为x1+x2-x3=10
    x3<=0
    则x3被称为剩余变量

4. 0-1型整数规划

0 −1型整数规划是整数规划中的特殊情形,它的变量 x j 仅取值 0 或 1。这时 x j 称 为0 −1变量,或称二进制变量。 x j 仅取值 0 或 1 这个条件可由下述约束条件:0 ≤ xj ≤ 1,整数。

4.1相互排斥的约束条件

若有两个相互排斥的约束条件为:5x1 + 4x2 ≤ 24 或 7x1 + 3x2 ≤ 45。

为了统一在一个问题中,引入0 −1变量 y ,则上述约束条件可改写为:

整数规划,数学建模,算法,机器学习,matlab,动态规划
式中:M为充分大的数

若把相互排斥的约束条件改为普通约束条件,就不需要引入M:
整数规划,数学建模,算法,机器学习,matlab,动态规划
改写为:
整数规划,数学建模,算法,机器学习,matlab,动态规划

  • 若有 m 个互相排斥的约束条件:
    整数规划,数学建模,算法,机器学习,matlab,动态规划
    为了保证这 m 个约束条件只有一个起作用,我们引入 m 个0 −1变量 yi(i = 1,2…m)1代表第i个约束条件起作用反之不起作用,引入一个充分大的常数 M ,而下面这一组m +1个约束条件
    整数规划,数学建模,算法,机器学习,matlab,动态规划
  • 由于m个yi中只有一个能取1,设yi* = 1,所以就只有i = i*的约束条件才起作用。
4.2关于固定费用的问题(Fixed Cost Problem)

在讨论线性规划时,有些问题是要求使成本为最小。那时总设固定成本为常数,并在线性规划的模型中不必明显列出。但有些固定费用(固定成本)的问题不能用一般线性规划来描述,但可改变为混合整数规划来解决。

  • 例题
    某工厂为了生产某种产品,有几种不同的生产方式可供选择,如选定的生产方式投资高(选购自动化程度高的设备),由于产量大,因而分配到每件产品的变动成本就降低;反之,如选定的生产方式投资低,将来分配到每件产品的变动成本可能增加。
    所以必须全面考虑。今设有三种方式可供选择:
    令x j 表示采用第 j 种方式时的产量;
    cj 表示采用第 j 种方式时每件产品的变动成本;
    k j 表示采用第 j 种方式时的固定成本。
    各种生产方式的总成本分别为:
    整数规划,数学建模,算法,机器学习,matlab,动态规划
    引入0 −1变量 y j ,令:
    整数规划,数学建模,算法,机器学习,matlab,动态规划
    目标函数为:
    整数规划,数学建模,算法,机器学习,matlab,动态规划
    由引入0-1变量中可表示3个线性约束条件:
    整数规划,数学建模,算法,机器学习,matlab,动态规划
    其中ε 是一个充分小的正常数,M 是个充分大的正常数。
  • 当 x j > 0时 y j必须为 1;当 x j = 0时只有 y j 为 0 时才有意义,所以上述约束条件完全可以代替引入0-1变量。
4.3指派问题的数学模型
  • 例题
    拟分配n人去做n项工作,每人做且仅做一项工作,若分配第i人去做j项工作,需要花费c(ij)单位时间,求如何分配工作使工人花费时间最少?
    设矩阵C = c(ij),C称为指派问题的系数矩阵。
    引入0-1变量,若x(ij) = 1表示第i个人做第j项工作。
    数学模型:
    整数规划,数学建模,算法,机器学习,matlab,动态规划

5. 蒙特卡洛法(随机取样法)

蒙特卡洛方法也称为计算机随机模拟方法,它是基于对大量事件的统计结果来实现一些确定性问题的计算。

  • 例题
    整数规划,数学建模,算法,机器学习,matlab,动态规划
    如果用显枚举法试探,共需计算(100)5 = 1010 个点,其计算量非常之大。然而应用蒙特卡洛去随机计算106 个点,便可找到满意解,那么这种方法的可信度究竟怎样呢?
    下面就分析随机取样采集106 个点计算时,应用概率理论来估计一下可信度。
    不失一般性,假定一个整数规划的最优点不是孤立的奇点。
    假设目标函数落在高值区的概率分别为 0.01,0.00001,则当计算106 个点后,有 任一个点能落在高值区的概率分别为
    1− 0.991000000 ≈ 0.99L99(100多位);
    1− 0.999991000000 ≈ 0.999954602。
% 先编写M文件mengte定义目标函数 f 和约束向量函数 g
function [f,g]=mengte(x);
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)-...
x(4)-2*x(5);
g=[sum(x)-400
x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800
2*x(1)+x(2)+6*x(3)-200
x(3)+x(4)+5*x(5)-200];

% 编写M文件main如下求问题的解
rand('state',sum(clock));  % 初始化随机数发生器
p0=0;
tic % 计时开始
for i=1:10^6
    x=randi([0,99],1,5); % 产生一行五列在区间[0,99]上的随机数
    [f,g]=mengte(x);
    if all(g<=0)
        if p0<=f
            x0=x;p0=f; % 记录当前较好的解
        end
    end
end
x0,p0
toc % 计时结束

输出为


x0 =

    41    96     3    99    12


p0 =

       49500

6. 整数线性规划的计算机求解

在Matlab上求解需要把多维决策变量化为一维决策变量,但是变量替换后很难把约束条件写出来。
Matlab求解混合整数线性规划的命令为:
[x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
对应数学模型为:
min f’x,
整数规划,数学建模,算法,机器学习,matlab,动态规划

  • 例题1
    已知指派矩阵
    整数规划,数学建模,算法,机器学习,matlab,动态规划
% 需要把二维决策变量x(ij)i,j=1,...5变成一维决策变量y(k)k=1,...,25
代码为:
clc,clear
c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5 
 8 4 2 3 5;9 10 6 9 10]; 
c=c(:); 
a=zeros(10,25); 
intcon = 1:25;
for i=1:5 
 a(i,(i-1)*5+1:5*i)=1; 
 a(5+i,i:5:25)=1; 
end 
b=ones(10,1); 
lb = zeros(25,1);
ub = ones(25,1);
[x,y]=intlinprog(c,intcon,[],[],a,b,lb,ub); 
x=reshape(x,[5,5]),y

输出为

x =

     0     0     0     0     1
     0     0     1     0     0
     0     1     0     0     0
     0     0     0     1     0
     1     0     0     0     0


y =

    21
  • 例题2
    整数规划,数学建模,算法,机器学习,matlab,动态规划

clc,clear
f = [-3;-2;-1];
intcon = 3;
a = ones(1,3); % 整数变量的地址
b = 7;
Aeq = [4,2,1];
beq = 12;
lb = zeros(3,1);
ub = [inf;inf;1]; % x(3)0-1变量
[x,z] = intlinprog(f,intcon,a,b,Aeq,beq,lb,ub)
x,z

输出为文章来源地址https://www.toymoban.com/news/detail-779673.html

x =

         0
    5.5000
    1.0000


z =

   -12

到了这里,关于算法2—整数规划的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数学建模之整数规划

    1 定义 数学规划中,变量部分或全部限制为整数,叫整数规划。 线性规划中,变量全是整数,叫整数线性规划。 2 分类 依据是否变量全为整数,分为完全整数规划和混合整数规划。 依据决策变量要求,分为纯整数,混合整数,全整数以及0-1规划。  注:1)松弛变量和剩余

    2024年02月12日
    浏览(46)
  • 数学建模(三)整数规划

    视频推荐:B站_数学建模老哥 目录 一、整数规划基本原理 1.1 整数规划的分类 1.2 整数规划的特点 1.3 案例 1.4  整数规划的数学模型一般形式 二、整数线性规划的求解方法 2.1 分枝定界法 2.1.1 分枝定界法的求解过程 2.1.2 案例 2.1.3 代码实现 2.2 割平面法 2.2.1 割平面法的基本思

    2024年02月12日
    浏览(39)
  • 数学建模——整数规划

    目录 基本概念 整数规划模型求解 整数线性规划模型求解 蒙特卡洛求解  遗传算法求解   其他 一部分或全部决策变量必须取整数值的规划问题称为 整数规划 。 纯整数规划:全部决策变量都为整数;混合整数规划:决策变量有一部分是整数值,另一部分不是整数;0-1整数规

    2024年02月07日
    浏览(49)
  • 数学建模——整数规划(0-1规划)问题

    题目:现拟将录用的8名公务员安排到所属的7个部门,并且要求每个部门至少安排一名公员。 x招聘领导小组在确定录用名单的过程中,本着公平、公开的原则,同时考虑录用人员的合理分配和使用,有利于发挥个人的特长和能力。招聘领导小组将7个用人单位的基本情况(包

    2023年04月17日
    浏览(37)
  • 二、数学建模之整数规划篇

    1.定义 2.例题 3.使用软件及解题 1.整数规划 (Integer Programming,简称IP):是一种数学优化问题,它是线性规划(Linear Programming,简称LP)的一个扩展形式。在线性规划中,优化目标和约束条件都是线性的,而在整数规划中,除了这些线性约束外,变量还被限制为整数值。在整

    2024年02月11日
    浏览(42)
  • 数学建模整理-线性规划、整数规划、非线性规划

    在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济 效益的问题。若目标函数及约束条件均为线性函数,则称为线性规划(Linear Programming 简记 LP)。 可行解 :满足约束条件的解。 可行预 :所有可行解构成的集合称为问题的可行域,记为R。 图解法

    2024年02月06日
    浏览(36)
  • 数学建模--非整数规划求解的Python实现

    目录 1.算法流程简介 2.算法核心代码 3.算法效果展示

    2024年02月10日
    浏览(38)
  • 【数学建模】混合整数规划MIP(Python+Gurobi代码实现)

    目录 1 概述 2 入门算例 2.1 算例 2.2 求解 ——Pulp库和cvxpy 3 进阶算例 3.1 算例 3.2 Python+Gurobi代码实现 3.3 运行结果 混合整数规划 (MIP) 是 NP-hard 问题中的一类,它的目标是在线性约束下将线性目标最小化,同时使部分或全部变量均为整数值,在容量规划、资源分配与装箱等等现

    2024年02月07日
    浏览(57)
  • python机器学习经典算法代码示例及思维导图(数学建模必备)

    最近几天学习了机器学习经典算法,通过此次学习入门了机器学习,并将经典算法的代码实现并记录下来,方便后续查找与使用。 这次记录主要分为两部分:第一部分是机器学习思维导图,以框架的形式描述机器学习开发流程,并附有相关的具体python库,做索引使用;第二部

    2024年02月12日
    浏览(36)
  • 数学建模常用算法—多目标规划

    前面我们已经学习了线性规划及非线性规划,接下来带大家一起学习多目标规划模型。 目录 模型的含义 求解思路 建立目标规划的条件 目标规划的目标函数 目标规划的模型应用 模型的建立 目标规划的一般数学模型 模型示例与求解 多目标规划是数学规划的一个分支。研究多

    2023年04月12日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包