多目标规划模型(灵敏度分析)
时间:2021-09-04
本文章向大家介绍多目标规划模型(灵敏度分析),主要包括多目标规划模型(灵敏度分析)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
求解思路若⼀个规划问题中有多个⽬标, 例如企业在保证利润最⼤时也要保证⽣产时产⽣的 污染最少。这种情况下我们可以对多⽬标函数进⾏加权组合, 使问题变为单⽬标规划 , 然后再利⽤之前学的知识进⾏求解。
-
将多目标规划转化为单目标规划问题,即对上面的两个目标函数进行加权。
-
如果两个目标函数的单位不同,我们需要首先对目标函数进行标准化来消除量纲的影响,然后再进行加权。(利用每个函数的参考值相除来相除量纲)
遇到要用到权重的规划问题需考虑到用灵敏度分析
敏感性分析:指从定量分析的角度研究有关因素发生某种变化对某一个或一组关键指标影响程度的一种不确定分析技术。其实质是通过逐一改变相关变量数值的方法来解释关键指标受这些因素变动影响大小的规律。
操作方法
通过改变f1和f2的权重,来观察对结果的影响
%% 多目标规划问题 w1 = 0.4; w2 = 0.6; % 两个目标函数的权重 x1 = 5 x2 = 2 w1 = 0.5; w2 = 0.5; % 两个目标函数的权重 x1 = 5 x2 = 2 w1 = 0.3; w2 = 0.7; % 两个目标函数的权重 x1 = 1 x2 = 6 c = [w1/30*2+w2/2*0.4 ;w1/30*5+w2/2*0.3]; % 线性规划目标函数的系数 A = [-1 -1]; b = -7; % 不等式约束 lb = [0 0]'; ub = [5 6]'; % 上下界 [x,fval] = linprog(c,A,b,[],[],lb,ub) f1 = 2*x(1)+5*x(2) f2 = 0.4*x(1) + 0.3*x(2) %% 敏感性分析 clear;clc W1 = 0.1:0.001:0.5; W2 = 1- W1; n =length(W1); F1 = zeros(n,1); F2 = zeros(n,1); X1 = zeros(n,1); X2 = zeros(n,1); FVAL = zeros(n,1); A = [-1 -1]; b = -7; % 不等式约束 lb = [0 0]; ub = [5 6]; % 上下界 for i = 1:n w1 = W1(i); w2 = W2(i); c = [w1/30*2+w2/2*0.4 ;w1/30*5+w2/2*0.3]; % 线性规划目标函数的系数 [x,fval] = linprog(c,A,b,[],[],lb,ub); F1(i) = 2*x(1)+5*x(2); F2(i) = 0.4*x(1) + 0.3*x(2); X1(i) = x(1); X2(i) = x(2); FVAL(i) = fval; end % 在图上可以加上数据游标,按住Alt加鼠标左键可以设置多个数据游标出来。 figure(1) plot(W1,F1,W1,F2) xlabel('f_{1}的权重') ylabel('f_{1}和f_{2}的取值') legend('f_{1}','f_{2}') figure(2) plot(W1,X1,W1,X2) xlabel('f_{1}的权重') ylabel('x_{1}和x_{2}的取值') legend('x_{1}','x_{2}') figure(3) plot(W1,FVAL) % 看起来是两个直线组合起来的下半部分 xlabel('f_{1}的权重') ylabel('综合指标的值')
在图上可以加上数据游标,按住Alt加鼠标左键可以设置多个数据游标出来。
相当于:两条函数直线,取两个函数的最小值
原文地址:https://www.cnblogs.com/keep--fighting/p/15227618.html
- 如何写好css系列之button
- Oozie分布式工作流——Action节点
- mockjs,json-server一起搭建前端通用的数据模拟框架
- Oozie分布式工作流——流控制
- C++命名规则
- 论JavaScript的作用域
- 删除链表中的重复元素
- Single Number and Single Number II
- 前端限制上传文件的类型
- JavaSript模块规范 - AMD规范与CMD规范介绍
- [大数据之Sqoop] —— Sqoop初探
- [大数据之Sqoop] —— 什么是Sqoop?
- Node.js包管理器Yarn的入门介绍与安装
- static_cast ,reinterpret_cast
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- AtCoder Beginner Contest 163 A~~D 详细代码讲解
- HUD 4841 (vector的用法)
- c++ 优先队列(priority_queue)的详细讲解用法
- HDU 1022(关于栈的详细解法)
- count_if函数的用法
- Codeforces Round #633 (Div. 2) A ~~C
- AtCoder Beginner Contest 162 A~~D
- P1036 选数
- P1028 数的计算
- P1598 垂直柱状图
- 递归解决全排列问题
- Codeforces Round #622 (Div. 2)A~~C1
- AtCoder Beginner Contest 156 A~~D
- AtCoder Beginner Contest 155
- Codeforces Round #620 (Div. 2) A~~D