学习笔记
熟悉目标规划的基本概念及数据模型
使用商用求解器gurobi求解案例

目标规划

  • 目标规划法是为了同时实现多个目标,为每一个目标分配一个偏离各目标严重程度的罚数权重,通过平衡各标准目标的实现程度,使得每个目标函数的偏差之和最小,建立总目标函数,求得最优解

  • 目标规划只是多目标决策的一种特殊情况,线性规划的一种特殊类型

  • 与线性规划的差异:线性规划只寻求目标函数的最优值,即最大值或最小值。而目标规划,由于是多目标,其目标函数不是寻求最大值或最小值,而是寻求这些目标与预计成果的最小差距,差距越小,目标实现的可能性越大

  • 基本思想:给定若干个目标及实现这些目标的优先顺序,在资源有限的情况下,使总偏离目标的偏差值最小

基本概念

偏差变量

  • 正偏差变量d−d^-d− 超过目标值的差值

  • 负偏差变量d−d^-d−未达到目标值的差值

  • d−>=0;d+>=0;d−∗d+=0d^- >= 0; d^+>=0; d^- * d^+=0d−>=0;d+>=0;d−∗d+=0

优先因子、权系数

  • 优先因子:在保证前一个目标值不会劣化的前提下优化下一个目标,为每个目标赋予优先级
  • 权系数:控制达到目标、不超过目标、不低于目标的偏好

目标约束

  • 由目标构成的约束,目标约束具有更大的弹性,允许结果与所制定的目标值存在正或负的偏差

  • 根据需要,将某些或全部绝对约束转化为目标约束。给绝对约束加上负偏差变量和减去正偏差变量即可

数学模型

demo

案例转载于第四天:目标规划(goal programming)
本文使用gurobi进行问题求解

from gurobipy import *model = Model()# 定义变量,(测试定义为连续性变量)
x1 = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name='x1')
x2 = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name='x2')
d1_ub = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name='d1_ub')
d1_lb = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name='d1_lb')
d2_ub = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name='d2_ub')
d2_lb = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name='d2_lb')
d3_ub = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name='d3_ub')
d3_lb = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name='d3_lb')# 添加约束
model.addConstr(6*x1 + 8*x2 + d3_lb - d3_ub == 48)
model.addConstr(4*x1 + 4*x2 + d2_lb- d2_ub == 36)
model.addConstr(x1 - 2*x2 + d1_lb -d1_ub == 0)
model.addConstr(5*x1 + 10*x2 <= 60)# 设置目标
model.setObjectiveN(d1_lb, index=0, priority=9)
model.setObjectiveN(d2_ub, index=1, priority=6)
model.setObjectiveN(d3_lb, index=2, priority=3)model.optimize()# 打印变量值及目标
for i in model.getVars():print(i.varName, '=', i.x)
print('obj = ', 6*x1.x + 8 * x2.x)
  • 结果

gurobi求解目标规划问题案例相关推荐

  1. 运筹优化在物流行业应用demo案例,Gurobi求解

    作者 | xulu1352   目前在一家互联网公司从事推荐算法工作(知乎:xulu1352) 编辑 | auroral-L (本篇文章已获得作者的独家授权,全文共4650字,预计阅读时间20分钟.) ...

  2. matlab 求解目标规划的序贯算法

    求解目标规划的序贯算法 clc,clear; x=optimvar('x',2,'LowerBound',0); dp=optimvar('dp',4,'LowerBound',0); dm=opti ...

  3. Gurobi求解运输问题

    表上作业法求解运输问题是运筹学里面的方法,在实际过程中可以直接使用求解器,简单又快捷. 文章目录 前言 一.pandas是什么? 二.使用步骤 1.引入库 2.读入数据 总结 前言 Gurobi对于线 ...

  4. 考虑网损,电压,阻塞的配电网二阶锥节点电价 (DLMP)需要gurobi求解器

    MATLAB代码:配网节点电价 DLMP 关键词:DLMP SOCP lindistflow 参考文档:<Distribution Locational Marginal Pricing (DL ...

  5. MATLAB 利用YALMIP+Gurobi 求解线性规划 -多无人机扫描覆盖

    使用要点 创建决策变量 设置目标函数 添加约束条件 参数配置 求解问题 问题描述 假设M个无人机的任务是尽快覆盖一组由 P 顶点表示的多边形凸区域,假设每架无人机的最大飞行时间是有限的,并且是预先知道 ...

  6. Gurobi求解器基础入门官方教程

    (一)基础操作 1.Gurobi简介 Gurobi是一种数学规划(线性和凸二次规划)优化器.支持多种语言接口,本文以python+gurobi为主. 2.Gurobi扩展包 在建模过程中,经常要对带下 ...

  7. 【运筹优化】调用Gurobi求解LP问题(Java代码示例)

    文章目录 问题 代码 求解结果 问题 代码 import gurobi.*; /*** @Author:WSKH* @ClassName:TestGurobi* @ClassType:* @Descr ...

  8. Python调用Gurobi求解简单线性规划问题

    前言 Gurobi是一款功能强大的商用求解器,支持Python.C.C++.Java等多种语言调用,相比于Cplex,Gurobi封装更高,更加方便,但是对于初学者而言会更难一些.Gurobi与Cpl ...

  9. gurobi求解日志log篇

    相信大家在求解的时候,总会看到这个,这就是gurobi的求解日志(log file).默认是直接开启的,可以通过:python m.setParam("OutputFlag", 0 ...

最新文章

  1. Partial Class部分类
  2. 四、编译安装php-5.5.34
  3. 【Linux】一步一步学Linux——dpkg命令(269)
  4. java时间日期工具类_java工具类--日期相关;
  5. 马斯克嘲讽元宇宙:谁会整天戴个头盔?
  6. 一篇文章让你理解面试难点:执行上下文(干货满满(附面试题))
  7. VMware vSphere “I moved it” or “I copied it” – What’s the difference?
  8. 微课|玩转Python轻松过二级(3.1节):列表推导式与切片
  9. oracle查询失效包sql,sql – ORA-00904:子查询中的标识符无效
  10. win10安装vbox没有虚拟网卡_消失的虚拟网卡
  11. 取经学道真经验——你听过这么享受的培训吗
  12. 【工具推荐】下载你在博客园的文章原稿
  13. 11计算机专业vb试题答案,西华师范大学计算机VB试题及答案11
  14. python 直方图均衡化_彩色图像直方图均衡化Python
  15. 现代密码学(七)对称密钥管理和公钥革命
  16. VC++6.0 内存泄露调试
  17. 程序员的护眼Style
  18. IE浏览器主页被劫持,如何解决主页被篡改问题?
  19. Java第一天笔记01——jdk8的安装与环境变量的配置
  20. 美元和人民币 货币转换

热门文章

  1. 7.0版本的微信你会接受它吗?
  2. 基于华为高端NAS存储双活的POC测试
  3. 机器学习笔记1.矩估计、极大似然估计。
  4. (E2)ENVI-met模型建立——创建项目及数据库的使用
  5. VSCode RemoteSSH 过程试图写入的管道不存在问题 解决
  6. 如何实现广告图片总是显示在页面上方,并且随滚动条同步移动?
  7. TCP/IP协议头部结构与解析
  8. POM 文件中 licenses 许可证的定义
  9. 大胆决定+细致用功, 才可能改变命运
  10. c# 编写水准测量平差程序