【多目标规划问题求解】ε-约束算法

这篇具有很好参考价值的文章主要介绍了【多目标规划问题求解】ε-约束算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ε-约束算法

TIME:2022/07/30
Author:雾雨霜星
Web:雾雨霜星的小站
小站原文链接:https://www.shuangxing.top/#/post?id=27

参考

[1]Nima Amjady and Jamshid Aghaei and Heidar Ali Shayanfar. Stochastic Multiobjective Market Clearing of Joint Energy and Reserves Auctions Ensuring Power System Security[J]. IEEE Transactions on Power Systems, 2009, 24(4) : 1841-1854.

[2]J. Aghaei and N. Amjady and H.A. Shayanfar. Multi-objective electricity market clearing considering dynamic security by lexicographic optimization and augmented epsilon constraint method[J]. Applied Soft Computing Journal, 2011, 11(4) : 3846-3858.

简介

用于计算多目标数学问题的一种计算方法。

选取一个主目标函数,将其余目标函数转化为约束,从而计算每个子优化目标,得到帕累托解集。

方法

原多目标优化问题如下:
min ⁡ { f 1 ( x ) , f 2 ( x ) , . . . , f n ( x ) } h ( x ) = 0 g ( x ) ≤ 0 \min \{f_{1}(x),f_{2}(x),...,f_{n}(x)\}\\ h(x)=0\\ g(x)\leq0 min{f1(x),f2(x),...,fn(x)}h(x)=0g(x)0
使用ε约束算法转化问题为:
min ⁡ f 1 ( x ) f 2 ( x ) ≤ ϵ 2 , . . . , f n ( x ) ≤ ϵ n h ( x ) = 0 g ( x ) ≤ 0 \min f_{1}(x)\\ f_{2}(x)\leq \epsilon_{2} ,...,f_{n}(x)\leq \epsilon_{n}\\ h(x)=0\\ g(x)\leq0 minf1(x)f2(x)ϵ2,...,fn(x)ϵnh(x)=0g(x)0
得到多个待优化的子问题,每个子问题得到一个解加入帕累托解集,最终从帕累托解集中选取一个最优解。

其中的参数 ϵ 2 \epsilon_{2} ϵ2,…, ϵ n \epsilon_{n} ϵn通过计算payoff table后得到。

payoff table的计算:

  1. 求解出第 i i i个目标函数的最优值 f i ( x i ∗ ) f_{i}(x_{i}^{*}) fi(xi),得到其最优解 x i ∗ x_{i}^{*} xi

  2. x i ∗ x_{i}^{*} xi代入其他目标函数得到 { f 1 ( x i ∗ ) , f 2 ( x i ∗ ) , . . . , f n ( x i ∗ ) } \{f_{1}(x_{i}^{*}),f_{2}(x_{i}^{*}),...,f_{n}(x_{i}^{*})\} {f1(xi),f2(xi),...,fn(xi)}

  3. 对全部目标函数按照上述流程求解,得到payoff table矩阵如下:
    ( f 1 ( x 1 ∗ ) . . . f i ( x 1 ∗ ) . . . f n ( x 1 ∗ ) ⋮ ⋱ ⋮ f 1 ( x i ∗ ) . . . f i ( x i ∗ ) . . . f n ( x i ∗ ) ⋮ ⋱ ⋮ f 1 ( x n ∗ ) . . . f i ( x n ∗ ) . . . f n ( x n ∗ ) ) \begin{pmatrix} f_{1}(x_{1}^{*})&...&f_{i}(x_{1}^{*})...&f_{n}(x_{1}^{*})\\ \vdots&\ddots&&\vdots\\ f_{1}(x_{i}^{*})&...&f_{i}(x_{i}^{*})...&f_{n}(x_{i}^{*})\\ \vdots&\ddots&&\vdots\\ f_{1}(x_{n}^{*})&...&f_{i}(x_{n}^{*})...&f_{n}(x_{n}^{*}) \end{pmatrix} f1(x1)f1(xi)f1(xn).........fi(x1)...fi(xi)...fi(xn)...fn(x1)fn(xi)fn(xn)

优化过程:

  1. 此时可从payoff table矩阵中对每个目标函数得到最优解(U)和最劣解(SN): f i U = f i ( x i ∗ ) , f i S N = f i ( x j ∗ ) f_{i}^{U}=f_{i}(x_{i}^{*}),f_{i}^{SN}=f_{i}(x_{j}^{*}) fiU=fi(xi),fiSN=fi(xj)

  2. 根据决策者的偏好,选取一个主目标函数 f k ( x ) f_{k}(x) fk(x)

  3. 对于主目标函数外的目标函数 f i ( x ) f_{i}(x) fi(x),设置一个网格化分数 q i j ∈ { 1 , 2 , . . . , q i , m a x } q_{ij}\in\{1,2,...,q_{i,max}\} qij{1,2,...,qi,max}。与网格搜索法本质相同。

  4. 由此计算除了主目标函数外的其余目标函数的ε约束如下:
    ϵ i j = f i S N − ( f i S N − f i U q i j ) ⋅ j j = 1 , 2 , . . . , q i , m a x \epsilon_{ij}=f_{i}^{SN}-(\frac{f_{i}^{SN}-f_{i}^{U}}{q_{ij}})\cdot j\quad j=1,2,...,q_{i,max} ϵij=fiSN(qijfiSNfiU)jj=1,2,...,qi,max
    因此每个目标函数 f i ( x ) f_{i}(x) fi(x)会存在 q i , m a x q_{i,max} qi,max个约束,由此得到优化子问题共计 ∏ i = 0 , i ≠ k n q i , m a x \prod_{i=0,i\neq k}^{n}q_{i,max} i=0,i=knqi,max个。

  5. 得到每个优化子问题如下:
    min ⁡ f k ( x ) subject to f 1 ( x ) ≤ ϵ 1 j , f 2 ( x ) ≤ ϵ 1 l , . . . , f n ( x ) ≤ ϵ 1 m , h ( x ) = 0 , g ( x ) ≤ 0 \min f_{k}(x)\\ \text{subject to}\quad f_{1}(x)\leq\epsilon_{1j},f_{2}(x)\leq\epsilon_{1l},...,f_{n}(x)\leq\epsilon_{1m},h(x)=0,g(x)\leq0 minfk(x)subject tof1(x)ϵ1j,f2(x)ϵ1l,...,fn(x)ϵ1m,h(x)=0,g(x)0
    其中, j = 1 , 2 , . . , q 1 , m a x ; l = 1 , 2 , . . , q 2 , m a x ; . . . ; m = 1 , 2 , . . , q n , m a x ; j=1,2,..,q_{1,max};l=1,2,..,q_{2,max};...;m=1,2,..,q_{n,max}; j=1,2,..,q1,max;l=1,2,..,q2,max;...;m=1,2,..,qn,max;

  6. 每次求出一个最优解,若在可行域内则加入帕累托解集,若不在可行域内则丢弃。

特点:

约束方法的一个理想特征是,我们可以通过适当地将值分配给 q i j q_{ij} qij来控制有效集表示的密度。网格点的数量越高,有效集的表示越密集,但计算时间越长。在有效集的密度和计算时间之间进行权衡总是可取的。

============================================================================
2023-08-29更新:
由于该文较为热门,很多人私信询问我的代码,因此我将自己的代码加入了文章中,方便各位学习,如有引用和转载此文章,请在文中进行说明标注此文出处。

# 说明:
# 1. 进行多目标优化,目标函数为:综合投资成本(ainv)、投资回收期(pb)、系统不确定适应度(a)。
# 2. 此处ε-约束法所得的每个子优化问采用Gurobi进行求解。
# 3. 默认系统不确定适应度a目标函数最劣为0,最优为1。
# 4. 由于此处我的Gurobi进行计算需要提供系统不确定适应度,因此默认以a=0的最劣来求其余目标函数的最优情况。
# 5. 选取不确定适应度a作为ε-约束算法的主目标函数。
# ----------------- 主程序 ----------------
# 记录开始时间
time_start = time.time()

# 非主目标函数的目标函数网格化参数(即上文所说的网格化分数qij)
ainv_Q = 10
pb_Q = 10

# 所求解的集合
solution_pool = []

# 初始化 ξ约束法的payoff矩阵
ainv_targetValue = []
pb_targetValue = []
a_targetValue = []

# ε-约束算法首先需要得到各个目标函数的最优和最劣,最劣从其他目标函数最优时将变量代入计算该目标得到
# ainv最优
td = ainv_gbm(a=0)  # ainv_gbm是计算ainv单目标优化的Gurobi函数
ainv_targetValue.append(td['annual_inv'])  # td['annual_inv']是ainv_gbm函数Gurobi优化结果中ainv的值
pb_targetValue.append(td['pb'])  # td['pb']是ainv_gbm函数Gurobi优化结果中pb的值
a_targetValue.append(0)

# pb最优
td = pb_gbm(a=0) # pb_gbm是计算pb单目标优化的Gurobi函数
ainv_targetValue.append(td['annual_inv'])
pb_targetValue.append(td['pb'])
a_targetValue.append(0)

# a最优(此处是为了得到a最优下的ainv和pb的值用于构建payoff矩阵)
td, o_flag = igdt_gbm()   # igdt_gbm是计算a单目标优化的Gurobi函数
ainv_targetValue.append(td['annual_inv'])
pb_targetValue.append(td['pb'])
a_targetValue.append(td['a'])  # td['a']是igdt_gbm函数Gurobi优化结果中a的值


# 获取最优值与最劣值
annualInv_U = min(ainv_targetValue)
annualInv_SN = max(ainv_targetValue)
paybackPeriod_U = min(pb_targetValue)
paybackPeriod_SN = max(pb_targetValue)
print("=======================================")
print("annualInv_U:", annualInv_U)
print("annualInv_SN:", annualInv_SN)
print("paybackPeriod_U:", paybackPeriod_U)
print("paybackPeriod_SN:", paybackPeriod_SN)
print("=======================================")

# ξ约束模型求解开始
for q1 in range(ainv_Q):
    for q2 in range(pb_Q):
        # 指示程序进展
        print('the ξ gens:', q1, q2)
        # 获取本轮ξ约束
        annualInv_target_c = annualInv_SN - (annualInv_SN - annualInv_U) / ainv_Q * q1
        paybackPeriod_target_c = paybackPeriod_SN - (paybackPeriod_SN - paybackPeriod_U) / pb_Q * q2
        # 子优化问题的求解
        # 通过传入annualInv_target_c与paybackPeriod_target_c在Gurobi内构建约束
        td_e, flag_e = igdt_gbm(ainv_c=annualInv_target_c, pb_c=paybackPeriod_target_c)
        # flag_e 是标志Gurobi求解是否有解的变量
        if not flag_e: continue
        # 更新所求解集合
        else: solution_pool.append([td_e['annual_inv'], td_e['pb'], 1 - td_e['a']])

# 记录结束时间
time_end = time.time()
time_sum = time_end - time_start

后续对所得解集合进行非支配排序即可得到帕累托解集。
具体帕累托解集中选取最优解,可参考模糊决策方法:
https://www.shuangxing.top/#/post?id=29文章来源地址https://www.toymoban.com/news/detail-450101.html

到了这里,关于【多目标规划问题求解】ε-约束算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 多目标优化算法求解无人机三维路径规划

    无人机三维路径规划是无人机在执行任务过程中的非常关键的环节,无人机三维路径规划的主要目的是在满足任务需求和自主飞行约束的基础上,计算出发点和目标点之间的最佳航路。 无人机三维路径规划的首要目标是寻找起飞点和目标点之间最短路程的飞行路径方案。一般

    2024年02月08日
    浏览(34)
  • 【运筹优化】带时间窗约束的车辆路径规划问题(VRPTW)详解 + Python 调用 Gurobi 建模求解

    车辆路径规划问题(Vehicle Routing Problem,VRP)一般指的是:对一系列发货点和收货点,组织调用一定的车辆,安排适当的行车路线,使车辆有序地通过它们,在满足指定的约束条件下(例如:货物的需求量与发货量,交发货时间,车辆容量限制,行驶里程限制,行驶时间限制等)

    2024年02月02日
    浏览(30)
  • scipy求解约束无导数优化问题:SHGO算法

    SHGO,即simplicial homology global optimize,来自2018年的文章,是一种基于组合拓扑学的优化方法,是一个非常新的算法。 这种算法适用于CDFO(constrained deriviate free optimisation)问题,所谓无导数优化,就是把目标函数当作黑箱子处理,而无法获取其一阶导数,自然也不能通过导数来判

    2024年02月14日
    浏览(33)
  • 基于梯度下降算法的无约束函数极值问题求解

    导数(Derivative),也叫 导函数值 。又名 微商 ,是微积分中的重要基础概念。 导数是函数的局部性质。一个函数在某一点的导数描述了这个函数在这一点附近的变化率 。如果函数的自变量和取值都是实数的话,函数在某一点的导数就是该函数所代表的曲线在这一点上的切线

    2024年02月13日
    浏览(31)
  • MATLAB粒子群算法求解带容量约束的物流配送选址问题实例

    粒子群算法编程问题实例: MATLAB粒子群算法求解带容量约束物流配送中心选址问题代码实例 在经度范围为(116, 118),纬度范围为(38, 40)的矩形区域内,散布着37个需求点,各个需求点的坐标及需求量见表1。要求在该矩形区域内确定N个位置建立配送中心。已知各配送中心容量不

    2024年02月10日
    浏览(42)
  • 通用的改进遗传算法求解带约束的优化问题(MATLAB代码精讲、实际工程经验分享)

    在对多约束、非线性问题的求解上,传统线性规划等方法往往无法有效求解(求解时间过长、无法处理非线性约束等。 进化算法是一类强有力的工具,已经在多个领域有了较为成功的应用。然而,在利用遗传算法、粒子群等等进化算法求解实际的优化问题时,还存在许多困难

    2023年04月19日
    浏览(56)
  • 算法分析与设计——动态规划求解01背包问题

    假设有四个物品,如下图,背包总容量为8,求背包装入哪些物品时累计的价值最多。 我们使用动态规划来解决这个问题,首先使用一个表格来模拟整个算法的过程。 表格中的信息表示 指定情况下能产生的最大价值 。例如, (4, 8)表示在背包容量为8的情况下,前四个物品的最

    2024年02月04日
    浏览(41)
  • 模拟退火算法与遗传算法求解多目标优化问题的算法实现(数学建模)

    模拟退火算法是一种全局优化算法,解决的问题通常是找到一个最小化(或最大化)某个函数的全局最优解。它通过模拟物理退火的过程来搜索解空间,在开始时以一定的温度随机生成初始解,然后一步步降低温度,同时在当前解的周围随机搜索新的解,并根据一定概率接受

    2024年02月02日
    浏览(34)
  • 整数规划——分支界定算法(旅行商问题,规约矩阵求解)

    一、普通优化问题分枝定界求解 题目的原问题为   在计算过程中,利用MATLAB中的linprog()函数进行求解最优解,具体的计算步骤如下: A为约束系数矩阵,B为等式右边向量,C为目标函数的系数向量。   进行第一次最优求解以A=[2 9;11 -8],B=[40;82],C=[-3,-13]利用linprog函数求解。解

    2024年02月16日
    浏览(27)
  • 【路径规划matlab代码】基于遗传算法求解机器人栅格地图路径规划问题

     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进, 代码获取、论文复现及科研仿真合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab完整代码及仿真定制内容点击👇 智能优化算法       神经网络预测       雷达通信    

    2024年03月08日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包