第四天:目标规划(goal programming)
目录
·目标规划问题及其数学模型
1.目标规划问题的提出
二、目标规划的数学模型
·Matlab中的目标规划函数——fgoalattain、gamultiobj
1.fgoalattain
2.gamultiobj
·目标规划问题及其数学模型
1.目标规划问题的提出
例:某一工厂生产两种产品,受到原材料供应和设备工时的限制。在单件利润等有关数据已知的条件下,要求生产制定一个获利最大的生产计划。具体数据见表1-1。
表1-1
产品 | 1 | 2 | 限量/件 |
原材料/(Kg/件) | 5 | 10 | 60 |
设备工时(h/件) | 4 | 4 | 40 |
利润/(元/件) | 6 | 8 |
设产品1和产品2的产量分别为,,当用线性规划来描述解决这个问题时,其数学模型为:
max
其最优解,即最优生产计划。
从线性规划的角度来看,问题似乎解决了,但是实际的要求中又与此有很大出入,财务部希望利润高,物资部希望材料消耗少,销售部门希望产品品种多样,适销对路;计划部门希望尽可能地大批量生产等等。也就是说,一个计划问题实际上是一个多目标决策的问题。
倘若一些限制条件是有弹性的,在一定条件下可以不用满足限制也可以,限制条件同时也有着优先级的区别等等。
由此分析,刚性约束或许并不符合实际,在计划实施的过程约束可以有一定的弹性。现代决策强调定量分析同定性分析相结合,强调硬技术同软技术相结合,强调矛盾与冲突的合理性;强调妥协与让步的必要性。
1961年,查恩斯(A.Charnes)和库伯(W.W.Cooper)提出目标规划(goal programming),得到广泛的重视和较快发展。目标规划在处理实际问题时,承认各项决策要求(可以时冲突的)的存在有其合理性;在做最终决策时,不强调其绝对意义的最优性。因此,目标函数被认为是一种更接近实际决策的决策工具。
二、目标规划的数学模型
假设在例1中,计划人员被要求考虑如下意见:
(1)由于产品2销售疲软,故希望产品2的产量不超过产品1的一半
(2)原材料严重短缺,生产中应避免过度消耗
(3)最好能节约4h设备工时
(4)计划利润不少于48元
面对这些意见,计划人员根据实际情况来对这些意见的优先级进行考虑,类似于这样的多目标决策问题就是典型的目标规划问题。
目标规划数学模型涉及下述基本概念:
1.偏差变量
对每一个决策目标,引入正负偏差变量和,分别表示决策值超过或不足目标值的部分。按定义应有
2.绝对约束和目标约束
绝对约束是指必须严格满足的约束条件,如线性规划中的约束条件都是绝对约束,即硬性约束。目标约束是目标规划特有的概念,是一种软约束,目标约束中决策值和目标值之间的差异用偏差变量表示。
3.优先因子于权系数
不同目标的主次轻重有两种差别。一种差别是绝对的,可以用优先因子来表示。只有高级优先级满足的基础上才能满足低级优先级。t值越大,优先级越小。
4.目标规划的目标函数
目标规划的目标函数(又称为准则函数或达成函数)由各目标约束的偏差变量及相应的优先因子和权系数构成。由于目标规划追求的是尽可能地接近目标值,也就是使各个有关偏差变量尽可能小,所以其目标函数只能是极小化。应用时,有三种基本表达式:
(1)要求恰好达到目标值。这时,决策值超过或不足目标值都是不希望的,因此有
(2)要求不超过目标值,但允许不足目标值。这时,不希望决策值超过目标值,因此有
(3)要求不低于目标值,但允许超过目标值,但不希望决策值低于目标值,因此有
建立数学模型:
假设原材料不得超过(绝对约束);产品2的产量要求优先考虑(目标约束);设备工时其次考虑(目标约束);最后考虑计划利润的要求(目标约束)。
则可以建立如下目标规划模型:
根据题意,应有
·Matlab中的目标规划函数——fgoalattain、gamultiobj
1.fgoalattain
使用方法
x = fgoalattain(fun,x0,goal,weight)
x = fgoalattain(fun,x0,goal,weight,A,b)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval,attainfactor,exitflag,output] = fgoalattain(problem)
fgoalattain可以用来形式如下的目标规划问题
PS:由于fgoalattain解的是极小化问题,因此当第i个目标fun(i)为最大时,fun(i)和goal(i)的系数需变为负
以例1来说,Matlab的代码如下:
fun函数
function f = fun(x)
f(1) = abs(x(1)-2*x(2)); %对产品2的目标
f(2) = abs(4*x(1)+4*x(2)-36);%对设备工时的目标
f(3) = -6*x(1)-8*x(2);%利润目标
end
main函数
goal = [0,0,-48];
weight = [10,2,1]; %权重,权重会对结果造成影响
A = [5,10];
b = 60;
Aeq = [];
beq = [];
lb = [0,0];
ub = [12,6];
x0 = [6,3];
[x,fval] = fgoalattain(@fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
运行结果
x =6.0000 3.0000fval =0.0000 0.0000 -60.0000
当,时,可以保证在权重goal=[10,2,1]情况下的最优解。此时可以保证所有目标。
对结果造成影响的变量是goal,不同的goal所计算的结果也会不同。具体情况具体分析。
2.gamultiobj
gamultiobj是Optimization Toolbox中使用遗传算法来解多目标问题的一个函数,其使用方法同fgoalattain类似
x = gamultiobj(fun,nvars)
x = gamultiobj(fun,nvars,A,b)
x = gamultiobj(fun,nvars,A,b,Aeq,beq)
x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub)
x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon)
x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,options)
x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = gamultiobj(problem)
[x,fval] = gamultiobj(___)
[x,fval,exitflag,output] = gamultiobj(___)
[x,fval,exitflag,output,population,scores] = gamultiobj(___)
其中,nvars为变量个数
[x,fx] = gamultiobj(@fun,2,A,b,Aeq,beq,lb,ub)
运行结果
x =0 07.2148 1.78510.0010 0.00053.2038 1.601912.0000 0.00015.4767 1.77654.1632 1.763310.7448 0.18669.5508 0.74116.1941 1.75060 03.6907 1.653112.0000 011.1880 0.24585.0110 1.76408.3720 1.54858.3708 1.284610.8537 0.4111fx =0 36.0000 03.6447 0.0004 -57.56960.0000 35.9941 -0.00980.0000 16.7770 -32.038411.9998 12.0003 -72.00061.9236 6.9872 -47.07220.6365 12.2940 -39.085610.3716 7.7259 -65.96218.0687 5.1673 -63.23312.6928 4.2212 -51.16950 36.0000 00.3846 14.6247 -35.369112.0000 12.0000 -72.000010.6964 9.7348 -69.09371.4831 8.9000 -44.17805.2750 3.6820 -62.62005.8016 2.6214 -60.501310.0314 9.0591 -68.4109
gamultiobj直接返回多个满足条件的解,如何选择看实际要求。
参考书籍:
胡运权,郭耀煌.运筹学教程[M].北京:清华大学出版社,2018:105-108
第四天:目标规划(goal programming)相关推荐
- 运筹说 第47期 | 算法介绍之目标规划
在上一期的学习中,我们对目标规划的相关概念和模型进行了讲解,本期我们进行运筹学之目标规划算法的讲解.我们将对目标规划的基础知识进行一个简单的回顾,并介绍求解目标规划的Excel方法.LINGO.MAT ...
- gurobi求解目标规划问题案例
学习笔记 熟悉目标规划的基本概念及数据模型 使用商用求解器gurobi求解案例 目标规划 目标规划法是为了同时实现多个目标,为每一个目标分配一个偏离各目标严重程度的罚数权重,通过平衡各标准目标的实现程 ...
- 目标规划模型:求解思路、序贯式算法
目录 1.线性规划的局限性 2.实际决策中,衡量方案优劣考虑多个目标 3.目标规划(Goal Programming) 4.求解思路 (1)加权系数法 (2)优先等级法 ...
- matlab目标规划设置偏差变量,目标值和偏差变量.PPT
目标值和偏差变量 精品课程<运筹学> 2.用图解法求解下列目标规划问题: 精品课程<运筹学> 3.用图解法解下列目标规划模型. 精品课程<运筹学> 第三节 目标规划 ...
- A002-185-2521-李子泓
课程名称 软件建模与分析 班级 18软工5班 专题名称 个人的需求分析与建模读书心得与对你组项目的发展建议 教导教师 董瑞生 姓名 李子泓 学号 1814080902521 日期 2020年12月19 ...
- 【GP】多目标规划建模方法
Navigator Goal programming 处理多目标规划问题的方法 评价函数法 线性加权法 平方和加权法 极小-极大法 乘除法 理想点法 MSEP算法 差分进化计算 Memetic算法 G ...
- matlab中的 complete,Complete-collection-of-algorithm
Complete-collection-of-algorithm 所属分类:matlab例程 开发工具:matlab 文件大小:7504KB 下载次数:2446 上传日期:2010-11-08 16: ...
- 转载 Assert断言知识
Assertion是用于在开发期间测试自己的些假设,当部属程序时则会被清除.这能够快速和有效地检测与修正程序中的错误.该特性从Java 1.4开始被支持. 一.Assertion语句的两种形式: 1, ...
- 基于 GL Pipeline 与光线追踪技术的融合实现的台球模拟器【100010712】
基于 GL Pipeline 与光线追踪技术的融合实现的台球模拟器 一.Project Title 基于 GL Pipeline 与光线追踪技术的融合实现的台球模拟 二.Abstract 本项目实现了 ...
最新文章
- 微软:Windows 7 SP1将于本月正式发布
- 「AI初识境」近20年深度学习在图像领域的重要进展节点
- VC++如何判断当前操作系统是32位还是64位?
- 什么是算法,为什么需要学算法,以及算法学到什么程度
- 如何使用Elixir和Phoenix快速入门构建CRUD REST API
- 【JavaScript】apply和call的区别在哪?
- uniapp小程序的getsysteminfo_Typecho小程序:Pisces-Mini-Program
- gtk_widget_add_events为某个构件添加一个事件
- 有一些无声话语,只有寻梦的人彼此听得见
- 《Spring微服务实战》读书笔记——通过配置服务器来管理配置
- mysql ageval 1 30_通过sqoop eval传递mysql属性
- opencv convertTo函数
- Android11不如,1200万像素的iPhone11真的不如4800万像素的安卓?
- Linux下用火焰图进行性能分析
- Java基础学习生疏知识点总结(4)——面向对象、单一职责原则、this关键字、构造方法
- 微信、支付宝付款码规则
- 2131数据结构实验之栈与队列一:进制转换
- 数据库系统概论——数据库安全性控制
- Python爬虫笔记——存储数据的基础知识(Csv、Excel)
- VS 2005 SP1简体中文版下载地址