智慧能源2——JuMP、MIDACO和plasmo

作业1

Julia运行一些JuMP的例子。

JuMP示例运行结果

作业2

MIDACO学习一下:
a. Python或Julia调用;
b. 黑箱优化的逻辑

a.

从网站下载midaco.jl/.py,并在同一文件夹内放入midacoJL.dll/midacopy.dll,然后运行网页内的example(此处使用的是NLP的示例)

分析示例的代码逻辑:

以Julia语言的代码为例,Python代码的逻辑与之完全相同,只是语法略有差异(如Python代码中列表的索引从0开始,而Julia代码中数组的索引从1开始)。

  1. 定义目标函数,如示例中的目标函数为$f(x)=(x_1-1)^2+(x_2-2)^2+(x_3-3)^2+(x_4-4)^2+1.23456789$
  2. 使用字符串key存放MIDACO的许可证密钥,用于激活MIDACO。
  3. 定义了两个字典problemoption,它们分别存储了问题的参数和算法的选项。在problem字典中,需要设置目标函数个数、变量个数、约束个数、变量上下界等参数;在option字典中,需要设置函数评价最大次数、算法运行的最长时间、输出最优解的频率、是否保存至文本文件等参数。
  4. 调用solution = midaco (problem, option, key),执行MIDACO算法,将问题参数、算法选项和许可证密钥作为输入,返回字典solution作为输出。Julia运行示例代码 Python运行示例代码 由于代码逻辑完全相同,从结果来看,果然没什么区别。

b.

MIDACO的黑箱算法逻辑:

  1. 首先MIDACO使用一种称为蚁群优化(ACO)的进化算法,通过模拟蚂蚁在寻找食物时留下的信息素来搜索最优解。MIDACO可以处理连续、离散或混合整数变量,以及单目标或多目标优化问题。
  2. MIDACO使用Oracle惩罚方法约束条件转化为惩罚项,加到目标函数上,从而实现约束优化。Oracle惩罚方法是一种自适应的方法,可以根据问题的特点动态调整惩罚系数。
  3. 然后MIDACO使用一种基于伪梯度的回溯线搜索方法,对每个候选解进行局部改进,以提高收敛速度和精度。伪梯度是一种无导数的梯度估计方法,可以用于黑盒优化问题,即目标函数和约束函数的具体形式未知,只能通过输入变量得到输出值的问题。
  4. MIDACO使用一种高效的并行化策略,可以同时评估多个候选解,从而加速CPU时间昂贵的应用程序。MIDACO的并行化方法不依赖于特定的语言或平台,可以用任何语言和方法来实现,例如OpenMP、MPI、GPGPU、Apache Spark等。

作业3

plasmo运行例子,及了解相应的思想

运行

plasmo示例运行结果

思想

plasmo是一种建立在JuMP.jl建模语言的基础上的基于图的优化框架,提供了一种模块化的方式来构建和求解优化问题。它的运行思想和逻辑可分为以下几个步骤:

  1. 创建一个OptiGraph对象,用于表示优化问题的图结构。OptiGraph对象由多个OptiNode对象和OptiEdge对象组成,分别表示图中的节点和边。每个OptiNode对象包含一个JuMP.jl模型,用于定义目标函数和约束条件。每个OptiEdge对象包含一个连接两个OptiNode对象的函数,用于定义节点之间的耦合关系。
  2. 使用Plasmo.jl提供的函数或自定义的函数,对OptiGraph对象进行处理。例如可以使用visualize函数来可视化OptiGraph对象的图结构,使用partition函数来对OptiGraph对象进行图划分,或者使用decompose函数来对OptiGraph对象进行分解式求解。
  3. 使用JuMP.jl提供的函数或自定义的函数,对OptiGraph对象中的OptiNode对象进行求解。例如,可以使用optimize!函数来调用不同的求解器,如IpoptGurobiCbc等,来求解OptiNode对象中的JuMP.jl模型,或者使用value函数来获取OptiNode对象中的变量或表达式的值。

其他

同时,由于我对优化了解很少,所以我又去阅读Ai4Energy的优化小节(链接Optimization · Ai4EDocs),目前只阅读了一点点。说实在的,在上一学期刚结束的时候,我甚至以为只能用机器学习等人工智能的方法进行优化。

一点小笔记:

GAMS

在GAMS中,我们使用”E=”表示等式约束,”L=”表示小于等于约束,”G=”表示大于等于约束。

SET i /1*3/; //定义一个集合i,包含三个元素,分别是1, 2, 3

帕累托最优:多目标优化之帕累托最优 - 知乎

优化算法入门

群体智能优化算法与人工智能算法

  蚁群算法、灰狼算法、飞蛾火焰算法都是一类群体智能优化算法,它们通过模拟自然界中不同生物的群体行为,来求解复杂的优化问题。它们的共同点是都是不确定的、概率型的、全局优化的、不依赖于问题本身的数学性质的、基于多个智能体的、具有本质并行性、突出性、自组织和进化性、稳健性的算法。它们的不同点是各自模拟的生物行为不同,因此具有不同的搜索策略、信息交流机制、参数设置、收敛性能等。

  机器学习、深度学习、强化学习都是一类人工智能的方法,它们通过从数据中学习规律和知识,来实现智能的任务。它们的共同点是都是基于数据的、具有学习能力的、可以处理复杂的非线性问题的方法。它们的不同点是各自的学习目标、数据类型、模型结构、评价指标等不同 。机器学习是一种广泛的概念,包括监督学习、无监督学习、半监督学习等多种类型,主要是利用已有的数据来训练模型,从而进行预测或分类等任务。深度学习是一种特殊的机器学习方法,主要是利用多层的神经网络来构建复杂的模型,从而挖掘数据中的深层特征和结构。强化学习是一种特殊的机器学习方法,主要是利用智能体与环境的交互来学习最优的行为策略,从而达到最大化的奖励或目标。

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2020-2024 Minato Xeon Microsoft
  • Visitors: | Views:

别和金钱过不去。

支付宝
微信