12.26代码复现

# 建立矩阵模型
m = Model('specification')
x = m.addMVar((48,),vtype=GRB.BINARY,name='x')
y = m.addMVar((240,),lb=-GRB.INFINITY,name='y')
u = m.addMVar((48,),vtype=GRB.BINARY,name='u')

以下是一个简单的示例代码,演示了如何使用 Python 和 Gurobi 库来实现 KKT 方法求解列约束生成算法:

import gurobipy as gp
from gurobipy import GRB# 创建模型
model = gp.Model('column_generation')# 添加变量
x = model.addMVar(name="x", lb=0.0, ub=GRB.INFINITY, shape=10)# 添加目标函数
model.setObjective(x.sum(), GRB.MAXIMIZE)# 添加初始列约束
model.addConstr(x[0] + x[1] <= 1)# 列生成算法迭代
for i in range(10):# 求解子问题submodel = gp.Model('subproblem')y = submodel.addMVar(name="y", lb=0.0, ub=GRB.INFINITY, shape=1)submodel.setObjective(y, GRB.MAXIMIZE)submodel.addConstr(x @ y <= i)  # 添加列约束submodel.optimize()# 获取最优解dual_solution = submodel.getAttr('Pi', submodel.getConstrs())# 检查KKT条件if dual_solution[0] <= 1:break  # KKT条件满足,停止迭代# 添加新的列约束model.addConstr(x @ dual_solution <= 0)# 求解最终问题
model.optimize()# 输出结果
print('最优解:', x.X)

 请注意,这只是一个简单的示例代码,实际的问题可能更加复杂。在实际应用中,您可能需要根据具体的问题进行适当的调整和扩展。

x = model.addMVar(name="x", lb=0.0, ub=GRB.INFINITY, shape=10)

这行代码使用 Gurobi Python API 创建了一个名为 x 的变量。

在这行代码中,我们使用了 addMVar 方法,它用于向模型中添加变量。

  • 参数 name 指定了变量的名称,
  • lb 和 ub 分别指定了变量的下界和上界,
  • shape 指定了变量的维度(这里是 10 维)。
  • GRB.INFINITY 表示正无穷。

因此,这行代码创建了一个包含 10 个元素的实数变量数组 x,每个元素的取值范围是大于等于 0 的实数。

KKT 方法(Karush-Kuhn-Tucker 方法)是用于求解约束优化问题的一种数学方法。它基于 KKT 条件,这是一组必要条件,用于判断在最优解处,对于有约束的优化问题,某个点是否为最优解。

KKT 方法适用于以下形式的优化问题:

最小化 f(x)(或最大化 -f(x))
满足 g(x) <= 0 和 h(x) = 0 的约束条件
其中,f(x) 是优化目标函数,g(x) 是不等式约束,h(x) 是等式约束。

KKT 方法通过以下一组条件来判断某个点 x 是否为最优解:

1. 约束条件的松弛条件:g(x) <= 0 和 h(x) = 0
2. 目标函数的梯度为零:∇f(x) + ∑(λ_i * ∇g_i(x)) + ∑(ν_i * ∇h_i(x)) = 0
3. λ_i >= 0(对于不等式约束)和 λ_i * g_i(x) = 0
4. ν_i(对于等式约束)没有限制

其中,λ_i 和 ν_i 分别是 Lagrange 乘子,用于将约束条件考虑到目标函数中。

KKT 方法的基本思想是通过引入 Lagrange 乘子,将约束条件考虑到目标函数中,然后通过求解 KKT 条件来判断某个点是否为最优解。如果满足 KKT 条件,则该点可能是最优解之一。

KKT 方法在数学优化领域中被广泛应用,特别是在非线性规划和凸优化问题中。它为判断最优解提供了一种有效的方法,并且为许多优化算法的理论基础。

这行代码是针对一个优化问题中的目标函数值和下界进行更新的操作。让我来解释一下:

MP_obj = MP.ObjVal  # 获取当前优化问题的目标函数值
LB = max(MP_obj, LB)  # 更新下界 LB,取当前目标函数值和原下界中较大的那个
  • 这段代码中,MP.ObjVal 是获取当前优化问题的目标函数值。这表示求解器(例如 Gurobi)已经找到了一个解,并计算出了对应的目标函数值。
  • 然后,LB = max(MP_obj, LB) 这行代码用来更新下界 LB。它比较当前的目标函数值 MP_obj 和之前的下界 LB,然后取其中较大的那个作为新的下界。
  • 在优化算法中,维护一个下界是很常见的。这是因为在一些优化算法中,我们可能无法找到全局最优解,但是我们可以找到一个较好的局部最优解。通过不断更新下界,我们可以逐渐缩小最优解的搜索范围,从而更接近全局最优解。
SP.addConstr(pi1 <= bigM*v, name='v1')
G3 = SP.addConstr(G@y-h+E@x.x+M@u <= bigM*(1-v), name='v2')
SP.addConstr(pi2 <= bigM*l, name='l1')
G4 = SP.addConstr(G1@y-h1+E1@x.x+M1@u <= bigM*(1-l), name='l2')
SP.addConstr(y <= bigM*w, name='w1')

解决了python中的图表显示问题,我好厉害,哈哈哈 

def plot_figure():plt.figure(1)Pg = plt.bar(range(24),y.x[:24])plt.figure(2)Ps_ch = plt.bar(range(24),y.x[24:48])plt.figure(3)Ps_dis = plt.bar(range(24),y.x[48:72])plt.figure(4)Pdr = plt.bar(range(24),y.x[72:96])plt.figure(5)Pbuy = plt.plot(range(24),y.x[144:168])Psell = plt.plot(range(24),y.x[168:192])plt.figure(6)Ppv = plt.plot(range(24),y.x[192:216])Pl = plt.plot(range(24),y.x[216:240])
plot_figure()

这段代码定义了一个名为 plot_figure 的函数,该函数用于绘制图表。具体来说,该函数使用了一个名为 plt 的库来进行图表绘制,其中 plt 可能是指 matplotlib 库。函数中的代码按顺序创建了六个不同的图表,并在每个图表中绘制了不同的条形图或折线图。

  • - 在第一个图表中,使用 plt.bar 绘制了一个条形图 Pg,其中 x 轴的取值范围为 0 到 23,对应 y.x 中的前 24 个元素。
  • - 在第二个图表中,绘制了另一个条形图 Ps_ch,同样的 x 轴取值范围,对应 y.x 中的第 25 到 48 个元素。
  • - 接着在第三个图表中,绘制了 Ps_dis 条形图,对应 y.x 中的第 49 到 72 个元素。
  • - 在第四个图表中,绘制了 Pdr 条形图,对应 y.x 中的第 73 到 96 个元素。
  • - 然后在第五个图表中,绘制了 Pbuy 和 Psell 两个折线图,分别对应 y.x 中的不同范围的元素。
  • - 最后在第六个图表中,绘制了 Ppv 和 Pl 两个折线图,同样对应 y.x 中的不同范围的元素。

总的来说,这段代码的功能是将一些数据以条形图或折线图的形式进行可视化展示。

以下是一个简单的基于 Python 的代码示例,用于使用 matplotlib 库创建并显示一个简单的折线图:

import matplotlib.pyplot as plt# 创建数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]# 绘制折线图
plt.plot(x, y)# 添加标题和标签
plt.title('Simple Line Plot')
plt.xlabel('X')
plt.ylabel('Y')# 显示图表
plt.show()
  • 在这个示例中,我们首先导入了 matplotlib.pyplot 库,然后创建了一些简单的数据。接下来,使用 plt.plot() 函数绘制了一个折线图,并使用 plt.title()、plt.xlabel() 和 plt.ylabel() 函数添加了标题和标签。最后,使用 plt.show() 函数显示了图表。
  • 当你运行这段代码时,会弹出一个新的窗口来显示折线图。你可以在这个窗口中查看图表的绘制结果,并进行交互操作。

但是目前还是不懂他的编程,为啥这样编啊,啊啊啊 

intelligent control

linspace(-10, 10, error_levels)

a=addvar(a,'input','e',[-3,3]);            %Parameter e
a=addmf(a,'input',1,'NB','zmf',[-3,-1]);
a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]);
a=addmf(a,'input',1,'Z','trimf',[-2,0,2]);
a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);
a=addmf(a,'input',1,'PB','smf',[1,3]);

a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);

 

rulelist=[1 1 1 1;         %Edit rule base2 2 1 1;3 3 1 1;4 4 1 1;5 5 1 1];a=addrule(a,rulelist);

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐一个vscode看着比较舒服的主题:Dark High Contrast

主题名称&#xff1a;Dark High Contrast &#xff08;意思就是&#xff0c;黑色的&#xff0c;高反差的&#xff09; 步骤&#xff1a;设置→Themes→Color Theme→Dark High Contrast 效果如下&#xff1a; 感觉这个颜色的看起来比较舒服。

【四】【C语言\动态规划】地下城游戏、按摩师、打家劫舍 II,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略&#xff0c;它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题&#xff0c;并将每个小问题的解保存起来。这样&#xff0c;当我们需要解决原始问题的时候&#xff0c;我们就可以直接利…

汽车项目管理

项目节点&#xff1a; MR (Management Review)——管理层评审 KO (Kick Off)——项目正式启动 SI (Strategy Intent)——战略意图 SC (Strategy Confirmation)——战略确认 PA (Program Approval)——项目批准 PR (Product Readiness)——产品就绪 VP (Verification Prototype)…

00-Git 应用

Git 应用 一、Git概述 1.1 什么是Git git 是一个代码协同管理工具&#xff0c;也称之为代码版本控制工具&#xff0c;代码版本控制或管理的工具用的最多的&#xff1a; svn、 git。 SVN 是采用的 同步机制&#xff0c;即本地的代码版本和服务器的版本保持一致&#xff08;提…

全正版商用视频素材网站,一个字:绝

大家心心念念的全正版商用视频素材网站终于来了&#xff0c;今天给小伙伴们推荐一个我的新宠&#xff0c;已经替大家体验了一番&#xff0c;不论是设计&#xff0c;还是搜索&#xff0c;都恰到好处的合适&#xff0c;完全就是为影视人、媒体人量身打造的&#xff01; 当当当&am…

亚马逊美国站ASTM F2613儿童折叠椅和凳子强制性安全标准

ASTM F2613折叠椅和凳子安全标准 美国消费品安全委员会&#xff08;CPSC&#xff09;发布的ASTM F2613儿童折叠椅和凳子的强制性安全标准&#xff0c;已于2020年7月6日生效&#xff0c;并被纳入联邦法规《16 CFR 1232儿童折叠椅和凳子安全标准》。 亚马逊要求在美国站上架的儿…

QT小技巧 - 使用QMovie进行gif切帧

简介 使用QMovie 将 gif 进行切帧&#xff0c; magick 进行合并代码 QString gifPath "E:\\workspace\\qt\\gif2imgs\\203526qre64haq3ccoobqi.gif"; // 你的图片QMovie movie(gifPath); movie.setCacheMode(QMovie::CacheNone);qDebug() << movie.frameCou…

Python——yolov8识别车牌2.0

目录 一、前言 二、关于项目UI 2.1、修改界面内容的文本 2.2、修改界面的图标和图片 三、项目修改地方 四、其他配置问题 一、前言 因为后续有许多兄弟说摄像头卡顿&#xff0c;我在之前那个MATS上面改一下就可以了&#xff0c;MAST项目&#xff1a;基于YOLOv8的多端车流检…

Matlab/Simulink的一些功能用法笔记(3)

01--引言 最近加入到一个项目组&#xff0c;有一些测试需要去支持&#xff0c;通过了解原先团队的测试方法后&#xff0c;自己作了如下改善&#xff0c;大大提高了工作效率。这也许就是软件开发的意义吧&#xff0c;能够去除一些重复的机械的人工操作并且结果还非常不可靠。 …

ArcGIS渔网的多种用法

在ArcGIS中有一个渔网工具&#xff0c;顾名思义&#xff0c;可以用来创建包含由矩形像元所组成网络的要素类。不太起眼&#xff0c;但它的用途却有很多&#xff0c;今天跟大家分享一篇关于渔网的多种用途。 1.马赛克地图制作 2.基于网格的设施密度统计制作马赛克地图 准备材…

马萨诸塞州道路数据集预处理

今天我们将分享Massachusetts Roads遥感道路语义分割数据集,并会在下期使用FC-DenseNet进行遥感影像道路提取。 Massachusetts Roads遥感道路语义分割数据集覆盖了美国马萨诸塞州超过2600km2的面积,包含城市、城镇、农村和山区等多种地区的道路信息,图像大小均为1500像素1500像…

Duboo-入门到学废【上篇】

目录 1&#x1f95e;.什么是duboo 2&#x1f32d;.架构图 3.&#x1f37f;快速入门 4.&#x1f9c7;浅浅理解 1.什么是duboo&#x1f936;&#x1f936;&#x1f936; Dubbo是一个由阿里巴巴开发的基于Java的开源RPC框架。它提供了高性能、透明化的远程方法调用&#xff0…

亚马逊云科技 re:Invent 2023 产品体验:亚马逊云科技产品应用实践 王炸产品 Amazon Q,你的 AI 助手

意料之中 2023年9月25日&#xff0c;亚马逊宣布与 Anthropic 正式展开战略合作&#xff0c;结合双方在更安全的生成式 AI 领域的先进技术和专业知识&#xff0c;加速 Anthropic 未来基础模型的开发&#xff0c;并将其广泛提供给亚马逊云科技的客户使用。 亚马逊云科技开发者社…

嵌入式-stm32-用PWM点亮LED实现呼吸灯

一&#xff1a;知识前置 1.1、LED灯怎么才能亮&#xff1f; 答&#xff1a;LED需要低电平才能亮&#xff0c;高电平是灯灭。 1.2、LED灯为什么可以越来越亮&#xff0c;越来越暗&#xff1f; 答&#xff1a;这是用到不同占空比来实现的&#xff0c;控制LED实现呼吸灯&…

MySQL日期查询 今天、明天、本月、下月、星期、本周第一天、本周最后一天、本周七天日期

文章目录 今天日期明天日期本月第一天本月最后一天下个月第一天当前月已过几天当前月天数当前月所有日期获取星期本周第一天本周最后一天获取本周的七天日期 今天日期 select curdate()明天日期 select DATE_SUB(curdate(),INTERVAL -1 DAY) AS tomorrow本月第一天 select d…

STM32 cubeMX 光敏电阻AD转化实验

文章代码使用 HAL 库。 文章目录 前言一、光敏电阻介绍二、光敏电阻原理图解析三、ADC采样介绍1. 工作原理&#xff1a;2. ADC精度&#xff1a; 四、STM32 cubeMX配置ADC采样五、代码编写总结 前言 实验开发板&#xff1a;STM32F051K8。所需软件&#xff1a;keil5 &#xff0c;…

ElasticSearch 的 mapping 参数 - fields

概要 在 es 中&#xff0c;一个字段可能运用于不同的场景&#xff0c;但是某个字段类型的使用场景是有局限的 下面&#xff0c;我们先来看一段 es 查询语句&#xff1a; $must ["bool" > ["should" > [["range" > ["user_id.r…

tekton 发布 kubernetes 应用

tekton 发布 kubernetes 应用 基于Kubernetes 服务部署 Tekton Pipeline 实例&#xff0c;部署完成后使用tekton来完成源码拉取、应用打包、镜像推送和应用部署。 本文实现一个 golang-helloworld 项目 CI/CD 的完整流程&#xff0c;具体包括以下步骤&#xff1a; 从 gitee…

设计模式-依赖注入模式

设计模式专栏 模式介绍模式特点应用场景依赖注入和控制反转的区别代码示例Java实现依赖注入模式Python实现依赖注入模式 依赖注入模式在spring中的应用 模式介绍 依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;是一种面向对象编程中的设计模式&…

【目标跟踪】解决多目标跟踪遮挡问题

文章目录 前言一、判定遮挡目标二、扩展目标框三、结论 前言 目标跟踪在发生遮挡时&#xff0c;极其容易发生Id Switch。网上许多算法忽视跟踪遮挡问题,同时网上相关资料也很少。博主为了解决跟踪遮挡&#xff0c;翻阅大量论文。分享其中一篇论文。论文链接&#xff1a;https:…