数学建模规划类问题一(线性/非线性单目标规划) 知识基础 规划问题定义 线性规划:在一组线性约束条件的限制下,求一线性目标函数最大或者最小的问题。线性意味着所有变量都是一次方的非线性规划:在一组非线性约束条件(也可以包含线性条件)的限制下,求一线性目标函数最大或者最小的问题。“也可以包含线性条件”是指非线性规划的约束条件可以是线性和非线性混合的 规划问题关键要素 决策变量:决策中待决定的自变量目标函数:取决于决策变量的函数约束条件:决策变量应该符合的基本条件 规划类优化问题类型 连续优化线性规划问题(
):目标和约束函数为线性函数非线性规划(
):目标或约束中存在非线性函数二次规划(
):目标为二次函数,约束为线性函数 离散优化整数线性规划(
):决策变量(部分或全部)为整数的线性规划问题整数非线性规划(
):决策变量(部分或全部)为整数的非线性规划问题
–
规划(
):决策变量为
或
的规划问题 单目标线性规划 linprog 函数 函数模型 参数解释 表示目标函数 表示不等式约束条件系数矩阵 表示不等式约束条件常数矩阵 表示等式约束条件系数矩阵 表示等式约束条件常数矩阵 表示决策变量的下限数组表示决策变量的上限数组由于 是线性函数,那么直接代入它的系数数组即可(按顺序对应变量)对于不存在的约束,在 中可以直接用空矩阵 代替 返回值解释 表示目标函数 取得最小值时的决策变量取值数组 表示目标函数 取得的最小值对于要求最大值的情形,取相反数作为目标函数代入即可 使用示例 设有线性规划问题如下: 不等式约束条件为:
等式约束条件为:
决策变量上下界为:
目标函数是:
将不等式和等式约束条件写成矩阵的形式:
调用函数解决: 如果成功调用并且结果正确,会在命令行区显示: intlinplog 函数 函数主要用于处理整数线性规划问题。 和 使用方法基本一致,唯一的不同是: 函数在参数列表的第一个参数后插入了一个类型为数组的参数:,这个参数数组的涵义是指明决策变量数组中的第几个变量为整数变量 比如 表示决策变量中
和
是整数变量 假设上面的例子中第二个变量即
是整数变量,那么调用函数应该这样修改: 调用这个函数会给出以下提醒: 请不要惊慌——这不是报错,它表示:这个解法得到的结果可能实际上不一定是一个整数,但是它已经尽可能地进行精确,并且当前的误差为 即
(你也可以将这个误差允许值设置得更小),它已经在这个误差内得到了结果。 单目标非线性规划 使用 进行优化(推荐) 是一款专门用于解决规划类问题的软件。在处理线性规划问题上,和 相比, 更具有优势:可以支持二维决策变量求解 问题时不需要进行初值估计使用集合命令,更加直观,方便描述复杂条件不需要人为指定算法,减少了理解算法的过程 请移步 调用 的 函数进行优化 的 函数也是进行非线性规划的函数。 但是由于该函数的内置算法可能会收敛到局部极小值,因此初值的选取可能会对结果造成影响。
函数模型 调用形式如下: 参数解释 表示目标函数,由自己编写非线性函数的 已经不能再使用数组进行描述(这种方法只适用于线性函数描述)有两个方法可以解决这个问题,一是定义为匿名函数(见使用示例),二是在同一文件夹下定义函数文件(见使用示例),两个方法都需要使用 进行传参 其实是 中的一种称为函数句柄的语法,实质类似于面向对象语言的函数对象 表示决策变量搜索的起点数组增添了 参数,是因为 采用的梯度下降方法可能会陷入局部最优,所以一定程度上依赖于初值的选取 表示不等式约束条件系数矩阵 表示不等式约束条件常数矩阵 表示等式约束条件系数矩阵 表示等式约束条件常数矩阵 表示决策变量的下限数组表示决策变量的上限数组 表示非线性约束,也由自己编写该变量需要 一个以决策变量数组 为输入,以标准化形式后的两个非线性代数式数组为输出的函数,详见使用示例 表示函数的设置选项,该参数可选 里面涉及到诸多内置算法的选择,但一般情况下我们不会修改 修改参数可以参见该网站 ,了解内置算法可以参见该网站 ,跳转 返回值解释 表示目标函数 取得最小值时的决策变量取值数组 表示目标函数 取得的最小值 此外还可以用下面的语法接收更多的返回值: 表示 退出条件 表示优化过程信息结构体该部分参见官方文档(跳转) ,如果觉得当前内容不够详细,可以访问官网更详尽的内容 使用示例 假设我们要求解一个多单目标非线性规划,如下:
线性约束条件为
x_3 \ge 0\\
x_1 + x_3 \le 30\\
x_2 + x_3 + 2x_4 \ge 0″ eeimg=”1″> 非线性约束为
x_2^2-x_3^3+x_4^2\le2″ eeimg=”1″> 所有变量的上下界条件为
第一步:编写目标函数文件 第二步:编写非线性约束文件 非线性函数返回的应该是两个数组,第一个数组为 ,即由 处的非线性不等式约束组成的数组;第二个数组为 ,即由 处的线性不等式约束组成的数组。 比如上面的例子,我们编写的非线性约束文件应该是: 注意:对于非线性不等式,约束的形式应该满足 ,如果不满足这一条件应该进行移项第三步:编写主文件 这个函数能跑,but 由于模型过于复杂跑不出来,不想改了.jpg,此处只是向大家展示一下正确语法(上述代码语法完全正确) 调用 的全局优化算法进行优化 MATLAB的全局优化工具箱提供了一些不错的全局优化算法,这个是它们的文档(跳转) 一些函数如下: 多点搜索( & ) 在《优化算法补充》中介绍 替代优化() 在《优化算法补充》中介绍 模式搜索() 在《优化算法补充》中介绍 遗传算法() 在《现代优化算法》中介绍 粒子群算法() 在《现代优化算法》中介绍 模拟退火() 在《现代优化算法》中介绍 多目标规划( & ) 在《线性和非线性规划(二)》中介绍备注:《线性和非线性规划(二)》、《优化算法补充》和《现代优化算法》都是本系列的内容,后续更新《线性和非线性规划(二)》介绍多目标规划《优化算法补充》介绍多点搜索( & )、替代优化()和模式搜索()《现代优化算法》主要介绍一些启发式算法,比如遗传算法()、粒子群算法()和模拟退火(),也会增加一些其它内容敬请期待!!!本文使用 Zhihu On VSCode 创作并发布
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/67206.html