求解器技术简介

举报
Bale10 发表于 2020/08/28 15:22:56 2020/08/28
【摘要】 求解器主要是用于求解线性规划问题,主要采用精确算法,如:单纯形法、内点法。

求解器简介

两种解决策问题的优化方法:

  • 启发式算法

  • 精确算法

精确算法特点:

  1. 精确算法可以得到最优解,启发式算法不能保证求得最优解(以及可行解与最优解的偏离) ;

  2. 精确算法可以判断问题的不可行性,启发式方法不能判断 ;

  3. 精确算法易于维护,容易适应不断变化的业务条件,启发式方法通常是针对特定问题的,条件的改变很容易使启发式方法无效。

求解器主要是用于求解线性规划问题(算法是用精确算法,如:单纯形法、内点法)

  • 线性规划Linear Programming,简称LP):目标函数和约束条件皆为线性的最优化问题;

  • 混合整数规划mixed integer programming,简称MIP):要求部分变量整数的线性规划问题;

  • 整数规划integer programming, 简称IP):要求所有变量为整数的线性规划问题;

  • 0-1整数规划:要求所有的变量都要是01。

image.png


线性规划问题

模型建立:

  1. 确定决策变量:根据影响所要达到目的的因素找到决策变量 ;

  2. 确定目标函数:由决策变量和所在达到目的之间的函数关系确定目标函数 ;

  3. 确定约束条件:由决策变量所受的限制条件确定决策变量所要满足的约束条件 ;

  4. 模型求解:在可行域内求目标函数的最优解及最优值。

线性规划问题标准形式:

image.png

其中xn维变量,c∈R^n是目标系数,c^T x是目标函数, b∈R^m是约束边界, A∈R^(m∗n)是约束矩阵


文件格式

建模文件: LP 格式、 MPS 格式,规划软件对 MPS 文件支持的更好

线性规划模型

image.png

MPS格式:

image.png

image.png

MPS文件:

image.png

LP文件:

image.png

数据结构

内存问题:LP的规模通常是由约束矩阵A的规模决定的,矩阵的元素通常用8个字节的double型储存,假设矩阵有m行,n列,则直接储存A需要8mn字节。如果A10000行,20000列(不是特别大规模的),那么需要1.6G内存储存A,一方面内存要求高,另一方面对矩阵A的操作困难。

稀疏性:大规模LP通常含有大量的零元,非零元占比非常小,这个性质称为稀疏性,即A为稀疏矩阵。

稀疏矩阵的储存:只存储矩阵中的非0 元素以及元素所在矩阵中的行标和列标。

1、三元组顺序表,存储的是三元组(即由 3部分数据组成的集合),组中数据分别表示(行标,列标,元素值)。

image.png

2行逻辑链接的顺序表,是在三元组顺序表的基础上增加一个专门记录矩阵中每一行第一个非0元在一维数组中的位置(提高了提取数据时遍历数组的效率)。

image.png

三元组顺序表和行逻辑链接的顺序表都是使用数组存储稀疏矩阵,数组 不利于插入和删除数据以上两种压缩存储方式都不适合解决类似 "向矩阵中添加或删除非 0 元素" 的问题。

3十字链表采用的是 链表+数组结构,

image.png


矩阵中的各行各列都各用一个链表存储,与此同时,所有行链表的表头存储到一个数组(rhead),所有列链表的表头存储到另一个数组(chead)中两个指针域分别用于链接所在行的下一个元素以及所在列的下一个元素。

注:

1、十字链表便于插入和删除元素,但是元素访问比行(列)逻辑链接顺序表慢;

2、一般先用十字链表建立稀疏矩阵,然后转换为顺序表,以便快速进行求解。

求解算法

image.png

单纯形法

基本思想:在可行域的一个顶点处找到一个初始可行解,判断该解是不是最优,若不是,则迭代到下一个顶点处进行重复判断

image.png

内点法

基本思想:迭代点在可行域的内部移动,并对接近可行域边界的点施加惩罚(加入障碍),距边界越近障碍越大,相当于在可行域的边界筑起一道很高的“围墙”,阻止迭代点穿越边界从而最优解“挡”在可行域内。

image.png

建模建议

避免数字问题

  • 矩阵:系数不要太大/太小 

  • 变量界限, 右侧项, 目标系数:不要太大 

  • 避免接近平行的约束 

  • 参考书籍:H.P.Williams:ModelBuilding in Mathematical Programming



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。