数模中的优化模型

前言

  • 本文总结了优化类常见模型,包括:线性规划、非线性规划、多目标规划
  • 涉及优化常见方法,包括:linprog函数,fmincon函数,蒙特卡罗法,序贯算法,optimvar和optimproblem函数等
  • 缺点:没有实际例子
  • 可以作为初学者的数模优化模型学习提纲

一、线性规划

三要素

  1. 决策变量:x,y…
  2. 目标函数:max y=40x1+30x2
  3. 约束条件:s.t....,注意非负数

简介

  1. 适用:在一组线性约束条件下,求线性目标函数的最大值或最小值
  2. 条件:变量关系都是线性的,即不存在X2,ex,1/x,sinx,log2x等等
  3. 多目标线性规划模型:如果目标函数多个,则是多目标线性规划模型

适用赛题

  1. 生产安排
  • 原材料、设备有限制,原利润最大
  1. 投资收益
  • 涉及资产配置、收益率、损失率、组合投资,总收益最大
  • 公式:风险率=投资额*损失率/总资产,收益率=收益/成本
  • 辨析:如果要求“总收益最大”,一般可以用线性规划,如果要求“总收益率最大”,一般是非线性规划(c是负一次方 )(不绝对)。判断标准:看所有变量是否一次方
  • 合理简化:对“总风险尽可能小”进行定值,转化为不等式,最后再模型改进,多次设定值;投资都大于额定投资费。
  • 常见思路:固定收益,极小化风险;固定风险,极大化收益;赋予风险和收益相应权重
  1. 销售运输
  • 产地、销地、产量、销量、运费,总运费最省
  1. 车辆安排
  • 路线、起点终点、承载量、时间点,车次安排最合理

代码求解

  1. linprog函数
  • 形式:[x,fal]=linprog(f,A,b,Aeq,beq,lb,ub)
  • 名称含义
    f目标函数的系数向量
    A,b不等式约束条件的变量系数矩阵和常数项矩阵
    Aeq,beq等式约束条件的系数矩阵和常数项矩阵
    lb,ub决策变量的最小取值和最大取值
    x返回最优解的变量取值
    fval返回目标函数的最优值
  • matlab标准型:模型的目标函数是求最小值、约束条件都是小于等于号或者等号(如果求最大值w,则是求-w的最小值,化为标准型)

二、蒙特卡罗法

简介

  1. 随机抽样,统计试验:当无法求精确解时,进行随机抽样,根据统计试验求近似解
  2. 适用:可行域过大,没有通用方法求出精确解
  3. 构成统计意义:抽样越多,越接近。
  4. 不同问题有不同的概率分布
  5. 如果有求精确解的方法,不要用该方法

代码求解

  1. 求pi的近似解思路
  • 随机投点(循环)在2*2的正方形中(中间有半径为1的圆形),看在半径为1的圆形中点所占比例,4乘以比例即为pi
  1. 常用rand产生随机数

三、非线性规划

简介

  1. 适用:模型中至少一个变量是非线性
  2. 形式与线性规划类似
  3. 一般来说,只能求近似解:线性规划的最优解只存在于可行域的边界上;非线性规划的最优解则可能在可行域内的任意一点

适用赛题

  1. 比值问题
  • 投资收益率,病毒传播率,经济增长率等
  1. 空间问题
  • 空间运动:曲线、角度变换。常用三角函数、指数函数和变量比值等
  • 角度选择:电影院最佳视角问题等
  1. 选址问题
  • 已知坐标、运送物品,求如何设置新位置使运量最多/最省等等
  • 点与点的距离公式属于非线性关系
  • 合理假设:任意两点可以直达

代码求解

  1. fmincon函数
  • 形式:[x,fal]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nunlcon)
  • 名称含义
    fun单独脚本文件里定义的目标函数
    x0决策变量的初始值(影响最终结果)
    A,b线性约束的不等式变量系数矩阵和常数项矩阵(<=
    Aeq,beq线性约束的等式变量系数矩阵和常数项矩阵
    lb,ub决策变量的最小取值和最大取值
    nonlcon非线性约束,包括不等式和等式
    x返回理想的变量取值
    fval返回目标函数的理想值
  • fun如果是同一文件的函数,写成:@+函数名
  • 可多次设不同初始值分别求多个解
  1. 蒙特卡罗法
  • 选址问题的思路:在一定范围生成随机数(所有决策变量),判断是否近似满足约束条件,满足的和前一个满足的比较,循环取最值的x,以该x矩阵为初始x0带入fmincon函数,可以的到比单独使用fmincon函数更精确
  1. 其他方法:二次规划、罚函数法、梯度法等等

四、多目标规划

简介

  1. 适用:既要…,又要…,还要…等等
  2. 需要衡量每个目标的完成情况,如果存在冲突,要在主观上区分三个目标的重要性,使得整体的完成情况尽量好(确定优先因子pk
  3. 约束分为:绝对约束、目标约束。目标约束允许有偏差

代码求解

  1. 正偏差变量:di+=max{fi-di0,0} 为实际值超过目标值的部分
  2. 负偏差变量:di-=-min{fi-di0,0} 为实际值未达到目标值的部分
  3. 运用偏差变量
  • 不超过:min di+
  • 不超过又不少于(且等权):min (di++di-)
  • 不超过又不少于(且不等权):例min (2di++di-)
  • 目标函数可以转化成为:偏差变量在优先因子加权下的和
  • 多退少补:x1+x2>=18 等价于 x1+x2+di--di+=18,这样就可以把不等式化为等式,作为约束条件
  1. 优先因子
  • 序贯算法中,优先因子只是用来区分目标的相对重要性,不需要具体数值
  • 线性加权法中,需要确定具体数值,该方法过于简单、适用性小,不建议用
  1. 序贯算法
  • 根据模型中各个目标的优先级(优先因子),确定各目标的求解次序
  • 求第一级单目标规划的最优值
  • 以第一级单目标等于最优值为新的约束,求第二级目标最优值
  • 递推,直到所有目标都求完,或者不存在可行解为止
  • 注意:优先因子只是用于确定求解次序,而非数值,防止主观性过大
  • 使用matlab中的优化变量optimvar和优化问题optimproblem
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值