最优化算法

您所在的位置:网站首页 整数规划问题的可行域 最优化算法

最优化算法

2024-07-10 12:48| 来源: 网络整理| 查看: 265

上一篇文章入口:最优化算法—(1)基础理论关键

目录 1.整数规划问题1.1.定义1.2.变量描述1.3.问题分类1.4.整数规划难点1.4.1.与连续优化问题区别1.4.2.计算复杂度1.4.3.求解思路 2.常用的整数规划算法2.1.分枝定界法2.2.割平面法2.3.隐枚举法2.4.匈牙利法2.5.蒙特卡罗法 3.库函数的使用

1.整数规划问题 1.1.定义

       在数学规划问题中一部分变量或者全部变量为整数变量的话,该数学规划问题就属于整数规划问题。如下所示是线性整数规划(Integer Linear Programming) 问题: 在这里插入图片描述

 

1.2.变量描述

       一般来说,之所以在模型中要引入整数变量主要原因有2点:     1)我们所需要描述的变量来自生活实际,而这些变量都是整数的。例如:要表示多少架飞机,多少辆汽车,多少个人等等 ;     2)我们要描述逻辑,Yes 或者 No,乃至于更复杂的逻辑关系。我们经常会用1代表Yes,0代表No,实际上准确的来说说 它们已经是 Bool 变量了。Bool 变量满足 Bool 变量的运算法则,例如 与或非这些,而不满足加减乘除的运算规则。    

1.3.问题分类

在这里插入图片描述

   

1.4.整数规划难点 1.4.1.与连续优化问题区别

       1)有限多个可行点     整数规划问题的可行域大多数情况下包含有限多个可行点,而连续优化问题正常情况下可行域包含的可行点是无穷多个。

       2)不可微     虽然连续优化问题的可行解有无数多个,但通过微积分的原理我们往往可以建立出针对连续优化问题的最优性条件,比如KKT条件就是典型的代表。如果是可微的凸优化问题,那可以给出全局最优的充要条件的。而在整数规划问题中,问题天生就不可微分就导致了我们无法使用微积分的工具,自然也很难得到最优性条件,同时由于天生是离散的 就注定了肯定也无法满足凸性。

 

1.4.2.计算复杂度

       绝大部分的整数规划问题的可行域包含有限多个可行点,一个最简单直观的想法就是穷举所有的可行点。设 X ={0,1}n是某个问题的可行域。假设有一台超级计算机,每秒钟可以计算该问题的目标函数 108 (1亿次)。     当n=30 时,我们需要计算时间为10秒     当n=40 时,我们需要计算时间为10000 秒,约折合3个小时。     当n=50 时,我们需要计算时间为1125899906842624 秒,约折合8年半     当n=100 时,我们需要计算时间为约折合4×10*14 年。这是什么概念呢? 地球诞生到现在大约45亿年左右,而这个计算时间大约是地球诞生到现在的十万倍。

 

1.4.3.求解思路

       ① 穷举法     ② Round取整法 先求解相对应的连续优化问题(舍弃整数约束),然后对所求得的解进行舍入(可能是四舍五入,也可能是其它的舍入方法),得到一个整数解。这个方法有2个问题:1是很难通过舍入得到一个满足约束的可行解;2即使能得到一个可行解,其质量可能往往很差。     ③ 启发式方法(Heuristic method) 其典型代表为贪婪法,例如在求解背包问题中,每次总是先放入价值最大的问题,直到放不进物品为止。启发式方法一般来说计算复杂度很低,可以快速的获得一个可行解。启发式方法很多时候也比较难以保证解的质量。

 

2.常用的整数规划算法

       (1)分枝定界法:可求纯或混合整数线性规划。     (2)割平面法:可求纯或混合整数线性规划。     (3)隐枚举法:用于求解0-1整数规划,有过滤法和分枝法。     (4)匈牙利法:解决指派问题(0-1规划特殊情形)。     (5)蒙特卡罗法:求解各种类型规划。

 

2.1.分枝定界法

       分支定界法,是求解混合整数线性规划问题的一种精确解法,分支定界法将解空间划分为一棵搜索树,通过松弛整数约束(整数—>连续),不断地求解子空间上的线性规划问题,并不断缩减原问题上界与下界之差,从而求解原问题。具体地,设有最大化的整数规划问题 A,与它相应的线性规划为问题 B从解问题 B 开始若其最优解不符合 A 的整数条件,那么 B 的最优目标函数必是 A的最优目标函数Z的上界,记作Zu; 而A的任意可行解的目标函数值将是Z的一个下界Zl。分枝定界法就是将 B的可行域分成子区域的方法。逐步减小Zu和增大Zl,最终求到 Z*.     机器学习辅助整数规划求解算法——分支定界法(branch and bound)

  在这里插入图片描述

    

       算法流程:

在这里插入图片描述

 

2.2.割平面法

       割平面法解题步骤    ① 用单纯或对偶单纯形法求解(IP)对应的松弛问题(LP)    (1)若(LP)没有可行解,则(IP)也没有可行解,停止计算    (2)若(LP)有最优解,并符合(IP)的整数条件,则(LP)的最优解即为(IP)的最优解,停止计算。    (3)若(LP)有最优解,但不符合(IP)的整数条件,转入下一步    ② 从(LP)的最优解中,选取一个和整数差值最大的x,将最优单纯形表中该行的系数分解为整数部分和小数部分,并以该行为源行,作割平面方程。    ③ 将所得的割平面方程作为一个新的约束条件置于单纯形表中,用对偶单纯形法求出新的最优解。

       割平面法详解:

       代码实现:

   

2.3.隐枚举法

       解0-1型整数线性规划最直观的方法,就是枚举法,即检查变量取值为0或1的每一种组合,比较目标函数值以求得最优解,这需要检查变量取值的2n个组合。     对于变量个数n较大(例如n>10),这几乎是不可能的。因此常设计一些方法,只检查变量取值的组合的一部分,就能求到问题的最优解。这样的方法称为隐枚举法(implicit enumeration). 分枝定界法也是一种隐枚举法。     例如 目标函数 max Z = 3X1 - 2X2 + 5X3     s.t. X1 + 2X2 - X3



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3