罚函数的概念及内罚与外罚的理解与应用

罚函数(Penalty Function)是一种在优化算法中用来处理约束问题的方法。

其基本思想是在目标函数中加入一个罚项(penalty term),以此来惩罚违反约束条件的解,从而引导算法寻找满足约束条件的最优解。

具体来说,当解不满足约束条件时,罚项会使得目标函数的值变得更差,从而使该解在优化过程中不被优先选择。反之,当解满足约束条件时,罚项为零或较小,不影响目标函数的值。

从而将有约束的优化问题转化为无约束优化问题。

在许多优化问题中,目标函数需要满足一些约束条件,如等式约束、不等式约束等。通过引入罚函数,可以构造一个新的无约束的优化问题,其目标函数包括原目标函数和罚函数两部分。

罚函数的思想是:如果约束条件被违反,则在目标函数中增加一个惩罚项,使得目标函数的值变大(或变小),从而在优化过程中避免接近或违反约束条件。通常,如果约束条件被满足,则罚函数的值为0,否则罚函数的值较大。

引入罚函数后,原有约束条件被转化为无约束优化问题,可以使用各种无约束优化算法来求解,如梯度下降法、牛顿法等。通过不断调整罚因子,使罚函数对应的惩罚足够大,从而逐步满足原约束条件。

将有约束问题转化为无约束问题的主要好处有:

  • 简化问题求解
    有约束优化问题往往更加复杂,需要特殊的优化算法和技术。而无约束优化问题可以使用广泛的无约束优化算法,如梯度下降法、牛顿法等,这些算法相对成熟和高效。
  • 统一求解框架
    通过罚函数法,可以将各种类型的约束(等式约束、不等式约束等)统一到同一种求解框架下,从理论和实现上更加简单统一。
  • 更高的鲁棒性
    一些约束优化算法对初值、约束等条件较为敏感,而无约束优化往往具有更好的鲁棒性和收敛性。
  • 并行计算友好
    无约束优化问题往往更适合并行计算,可以充分利用现代计算设备的算力。
  • 处理途径多样
    通过选择不同类型的罚函数(内罚、外罚、对数罚等),可以灵活地应对各种约束优化问题。

在这里插入图片描述

举例说明

在这里插入图片描述我们选择一个合适的罚因子 λ,例如 λ=100,然后最小化新的目标函数 F(x)。

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize

# 定义原始目标函数
def f(x):
    return x**2

# 定义罚函数
def penalty_function(x, lambda_):
    penalty = lambda_ * max(0, 1 - x)**2
    return f(x) + penalty

# 优化新的目标函数
lambda_ = 100  # 选择一个较大的罚因子
result = minimize(lambda x: penalty_function(x, lambda_), x0=0)

# 打印结果
print("优化结果:")
print("x =", result.x)
print("f(x) =", f(result.x))
print("惩罚后的目标函数值 =", penalty_function(result.x, lambda_))

# 绘制图形
x_vals = np.linspace(-2, 2, 400)
f_vals = [f(x) for x in x_vals]
penalty_vals = [penalty_function(x, lambda_) for x in x_vals]

plt.figure(figsize=(10, 6))
plt.plot(x_vals, f_vals, label='Original Objective Function $f(x) = x^2$')
plt.plot(x_vals, penalty_vals, label=f'Penalty Function with $\\lambda = {lambda_}$')
plt.axvline(1, color='r', linestyle='--', label='Constraint $x \\geq 1$')
plt.scatter(result.x, f(result.x), color='g', zorder=5, label='Optimized Point')
plt.xlabel('x')
plt.ylabel('Function Value')
plt.legend()
plt.title('Penalty Function Optimization')
plt.grid(True)
plt.show()

在这里插入图片描述
在这里插入图片描述
(0.9900990106714566, 0.9802960509325971, array([0.99009901]))

优化结果如下:

优化得到的 x≈0.99
原始目标函数 f(x)=x^2的值为 f(x)≈0.98
惩罚后的目标函数值为 ≈0.99

从图中可以看到,当 x<1 时,罚项显著增加了目标函数的值,从而惩罚了不满足约束条件的解。优化过程最终找到了接近约束条件 x≥1 的最优解。

内罚函数

在这里插入图片描述在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize

# 定义原始目标函数
def f(x):
    return (x - 2)**2

# 定义内罚函数
def penalty_function(x, mu):
    penalty = -mu / (x - 1) if x > 1 else np.inf
    return f(x) + penalty

# 优化新的目标函数
mu = 0.1  # 选择一个合适的罚因子
result = minimize(lambda x: penalty_function(x, mu), x0=1.5, bounds=[(1.01, None)])

# 打印结果
optimized_x = result.x[0]
optimized_f = f(result.x)[0]
penalty_f = penalty_function(result.x, mu)

# 绘制图形
x_vals = np.linspace(1.01, 3, 400)
f_vals = [f(x) for x in x_vals]
penalty_vals = [penalty_function(x, mu) for x in x_vals]

plt.figure(figsize=(10, 6))
plt.plot(x_vals, f_vals, label='Original Objective Function $f(x) = (x-2)^2$')
plt.plot(x_vals, penalty_vals, label=f'Penalty Function with $\\mu = {mu}$')
plt.axvline(1, color='r', linestyle='--', label='Constraint $x > 1$')
plt.scatter(result.x, f(result.x), color='g', zorder=5, label='Optimized Point')
plt.xlabel('x')
plt.ylabel('Function Value')
plt.legend()
plt.title('Interior Penalty Function Optimization')
plt.grid(True)
plt.show()

optimized_x, optimized_f, penalty_f

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

每文一语

学习是不断探索的过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/726529.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【漏洞复现】金和OA C6 download.jsp 任意文件读取漏洞

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…

ps 科研图文字变清晰

目录 网站 PS 网站 AI照片修复神器&#xff0c;一键模糊图片变清晰 (picwish.cn) PS 用PS快速将一张模糊不清晰的照片变清晰&#xff0c;简单5步就好 - 知乎 (zhihu.com) CrtlJ 滤镜 其他 高反差 半径调2 叠加

深度神经网络工作原理深度神经网络训练过程(Deep Neural Networks)概述应用示例

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

家具市场规模超7660亿美元,赛盈分销这些卧室家具在海外大卖!

今年&#xff0c;全球家具市场似乎表现都十分乐观。 根据海关出口总署的相关数据&#xff0c;我国的家具出口额1-5月份达到了2121.5亿元&#xff0c;同比增长20.5%。国内家具出口增速显著&#xff0c;换句话说&#xff0c;就是老外对家具又有更多的消费能力了。 在Statista的…

Simufact Additive仿真助力金属粘结剂喷射成型(MBJ)工业化

引 言 烧结过程中“设计”补偿变形的能力被视为是实现金属粘结剂喷射成型&#xff08;MBJ&#xff09;快速商业化的关键。针对烧结过程的仿真分析&#xff0c;Simufact Additive软件现已推出了MBJ仿真模块第三个版本&#xff0c;当前版本能够准确模拟烧结过程&#xff0c;预测…

万能DIY预约小程序源码系统 适合任何行业在线预约报名 带完整的安装代码包以及搭建教程

系统概述 在当今数字化时代&#xff0c;线上预约和报名系统已经成为各行各业不可或缺的工具。为了满足市场需求&#xff0c;万能 DIY 预约小程序源码系统应运而生&#xff0c;它为各类企业和组织提供了一种便捷、高效、灵活的解决方案&#xff0c;可适用于任何行业的在线预约和…

【Python/Pytorch - 网络模型】-- TV Loss损失函数

文章目录 文章目录 00 写在前面01 基于Pytorch版本的TV Loss代码02 论文下载 00 写在前面 在医学图像重建过程中&#xff0c;经常在代价方程中加入TV 正则项&#xff0c;该正则项作为去噪项&#xff0c;对于重建可以起到很大帮助作用。但是对于一些纹理细节要求较高的任务&am…

“2024国际数字能源展”推动绿色低碳发展,助力实现“双碳”目标

随着全球气候变化问题的日益严峻&#xff0c;构建现代能源体系、推动绿色低碳发展已成为各国共同的使命和追求。在这一背景下&#xff0c;我国提出了“四个革命、一个合作”的能源安全新战略&#xff0c;旨在推动能源生产消费革命&#xff0c;保障国家能源安全&#xff0c;助力…

STM32 FreeRTOS应用

在《按键控制蜂鸣器鸣笛》的程序基础上&#xff0c;将功能导入到FreeRTOS系统上跑&#xff0c;实现检测扩展板上的KEY1状态&#xff0c;控制蜂鸣器鸣笛。按一下按键&#xff0c;蜂鸣器滴滴滴响&#xff08;每200毫秒响一次&#xff09;&#xff0c;再按一次按键&#xff0c;蜂鸣…

惠普8596E频谱分析仪

8590E系列频谱分析仪具有各种各样的性能、功能&#xff0c;其价格亦是为适应用户的承受能力而确定的。用户可以从价格低廉、具有基本性能的分析仪直至高性能分析仪中进行挑选&#xff0c;无论选择哪种分析仪&#xff0c;都会感受到8590系列频谱分析仪便于使用且高度可靠。这些仪…

Day7—zookeeper基本操作

ZooKeeper介绍 ZooKeeper&#xff08;动物园管理员&#xff09;是一个分布式的、开源的分布式应用程序的协调服务框架&#xff0c;简称zk。ZooKeeper是Apache Hadoop 项目下的一个子项目&#xff0c;是一个树形目录服务。 ZooKeeper的主要功能 配置管理 分布式锁 集群管理…

ABB机器人SMB板卡的安装及更换方法

ABB机器人SMB板卡的安装及更换方法 SMB板卡: ABB机器人的串行测量板,即SMB板(Serial measurement board)是用来记录机器人的每个轴的原点及运行轨迹的。 机器人的运动是由电机带动齿轮箱进行运动的。电机的位置信息则由安装在电机尾端的编码器反馈给SMB板,SMB板再连接到机器…

浅析MySQL-基础篇01

目录 执行一条select语句&#xff0c;发生了什么&#xff1f; MYSQL执行流程是怎么样的&#xff1f; 第一步&#xff1a;连接器 第二步&#xff1a;查询缓存 第三步&#xff1a;解析SQL 解析器 第四步&#xff1a;执行SQL 预处理器 优化器 执行器 执行一条select语句…

Web渗透:XSS-反射型存储型

跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;XSS&#xff09;是一种常见的网络安全漏洞&#xff0c;它允许攻击者将恶意脚本注入到网页中&#xff0c;其他用户在浏览这些页面时&#xff0c;可能会执行这些恶意脚本&#xff0c;从而导致各种安全问题&#xff0c;如…

SN74HC14+陶瓷振子做振荡器的试验初步

面包板搭建&#xff0c;4.5V电池供电。 注意我用杜邦线插1脚并缠绕到小频谱的天线上面&#xff0c;如果直接用杜邦线转sma。请先过衰减器。 本想试验一下465khz用SN74HC14做振荡器&#xff0c;实验了很多次&#xff0c;无法起振。 用1M&#xff0c;4M的也无法起振&#xff0c;…

【TB作品】MSP430G2553,单片机,口袋板,流量积算仪设计

题9 流量积算仪设计 某型流量计精度为0.1%, 满刻度值为4L/s&#xff0c;流量计输出为4—20 mA。 设计基于MSP430及VFC32的流量积算仪。 具体要求 (1) 积算仪满刻度10000 L&#xff0c;精度0.1 L; 计满10000 L&#xff0c;自动归零并通过串口&#xff08;RS232&#xff09;向上位…

git配置ssh key

一、生成ssh公钥和私钥对 打开终端&#xff0c;输入命令&#xff0c;-C 后是git邮箱&#xff0c;在 Enter file in which to save the key (/home/my/.ssh/id_rsa): 后可以输入公钥和私钥对保存路径及文件名&#xff0c;默认是 /home/my/.ssh/id_rsa&#xff0c;其它的全部按回…

YOLOv8改进 | Neck | 添加双向特征金字塔BiFPN【含二次独家创新】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a;《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容&#xff0c;内含各种Head检测头、损失函数Loss、B…

React-Redux学习笔记(自用)

1. 环境搭建 插件安装&#xff1a;Redux Toolkit和react-redux npm i reduxjs/toolkit react-redux2、 store目录结构设计 集中状态管理的部分会单独创建一个store目录&#xff08;在src下&#xff09;应用通常会有很多个子模块&#xff0c;所以还会有个modules目录&#x…

贴图法美化Button按钮

贴图法美化Button按钮 项目是在下面这篇文章里的基础上进行美化的&#xff1a;MFC实现INI配置文件的读取 1. 初始效果 2.最终效果 3. 增加 CImgButton 类 1.1 ImgButton.h 头文件 #pragma once // CImgButtonclass CImgButton : public CBitmapButton {DECLARE_DYNAMIC(CImgBu…