问题标签 [pymoo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 将优化从 PuLP 转换为 pymoo
我正在尝试在 pymoo 中实现多目标优化问题。目前,它是纸浆中的单目标优化问题。
问题是在以下约束条件下最大化分数总和:
- 获得 100 个项目组合(决策变量之和 == 100)
- 项目不能以超过 40 个组合出现(对于每个项目,项目总和 * 决策变量 <= 40)
按照 pymoo 文档,我正在尝试使用矢量化评估。除了分数数组之外,我还有一个多样性数组,它由 0 到 1 之间的浮点数组成。我想确定帕累托前沿以最大化这两个值。
从文档中不清楚我将如何设置这个问题?我假设 n_var 等于项目中的行数,n_obj 将是 2。我是否必须预先计算约束的数量(这里它将是 1 + 项目中的列数)还是只是 2?决策变量是二元的,所以 xl=0 和 xu=1?
对于评估,我了解如何计算目标函数。但是,约束计算似乎隐含 <= 0,并且不清楚我将如何指定 100 个项目组合中每个单独项目的总和必须 <= 40。
提前感谢您的任何建议。我是一位经验丰富的 python 程序员,但我对优化库的经验有限。
python - Python pymoo - 将自变量作为参数传递
我正在使用 pymoo 包进行多目标优化,但在设置模型时遇到了问题,因为在尝试将其他自变量作为参数传递时出现错误(除了正在优化的参数)。对于 OOP 和函数式编程,我尝试按照 getting_started 示例 ( https://pymoo.org/getting_started.html )。我的目标函数有自变量 t、total 和 G,其中 t 和 total 是数组,G 是标量。我尝试像这样通过它们:
导致:
TypeError:_evaluate() 得到了一个意外的关键字参数“算法”
p 是我要优化的三个参数的列表。
使用函数式编程我找不到可以在 FunctionalProblem 对象中传递参数的位置,所以我只是这样做了:
这导致:
TypeError: () 缺少 2 个必需的位置参数:'total' 和 't'
其余代码(算法和终止对象等)与 Getting_started 示例中的相同,因为我现在只是想让它运行..
有没有人尝试过使用 pymoo 传递参数并且知道如何正确地做到这一点?
python - Pymoo 在候选搜索空间中工作的可能性
我有两个目标函数、三个变量和零约束的问题。我还有从 CSV 读取的这些变量的搜索空间。是否可以使用 pymoo 来使用变量的搜索空间(而不是 xl 和 xu)来获得最大化两个函数的最佳组合。
当我使用 xl 和 xu 时,它总是得到 [1.0,1.0,1.0] 的组合,但我想从我的 numpy 多维数组中获得最佳组合。
如下所示:
谢谢你的帮助!
python - Pymoo Python:TypeError:_evaluate() 得到了一个意外的关键字参数“算法”
我正在尝试使用 Python 的 Pymoo 库设置我的优化,我正在使用他们的“入门”指南,但传递了我自己的独立变量,也没有使用约束。我使用指南中的示例函数得到了相同的结果(我在下面的代码中将它们注释掉了)。
这是代码:
当我在 Problem 类的 _evaluate_elementwise 方法中打印出kwargs时,确实我知道它是算法对象:
{'algorithm': <pymoo.algorithms.nsga2.NSGA2 object at 0x00000212D12413C8>}
我很难看出它如何将算法对象作为 _evalute 的参数,它接受 (_x,_out,*args,**kwargs)。如果有人更熟悉这个包,我会非常感激帮助!
这是完整的引用:
关键字参数:{'algorithm': <pymoo.algorithms.nsga2.NSGA2 object at 0x00000212D12413C8>} Traceback(最近一次调用最后一次):
文件“”,第 6 行,详细 = True)
文件“C:\Users\anaconda3\lib\site-packages\pymoo\optimize.py”,第 85 行,最小化 res = algorithm.solve()
文件“C:\Users\anaconda3\lib\site-packages\pymoo\model\algorithm.py”,第 226 行,在求解 self._solve(self.problem)
_solve self.next() 中的文件“C:\Users\anaconda3\lib\site-packages\pymoo\model\algorithm.py”,第 321 行
文件“C:\Users\anaconda3\lib\site-packages\pymoo\model\algorithm.py”,第 243 行,在下一个 self.initialize()
文件“C:\Users\anaconda3\lib\site-packages\pymoo\model\algorithm.py”,第 215 行,初始化 self._initialize()
_initialize self.evaluator.eval(self.problem, pop, algorithm=self) 中的文件“C:\Users\anaconda3\lib\site-packages\pymoo\algorithms\genetic_algorithm.py”,第 81 行
文件“C:\Users\anaconda3\lib\site-packages\pymoo\model\evaluator.py”,第 78 行,在 eval self._eval(problem, pop[I], **kwargs)
文件“C:\Users\anaconda3\lib\site-packages\pymoo\model\evaluator.py”,第 97 行,在 _eval **kwargs 中)
文件“C:\Users\anaconda3\lib\site-packages\pymoo\model\problem.py”,第 284 行,in 评估 = self._evaluate_elementwise(X, calc_gradient, out, *args, **kwargs)
_evaluate_elementwise [ret.append(func(x)) for x in X] 中的文件“C:\Users\anaconda3\lib\site-packages\pymoo\model\problem.py”,第 413 行
文件“C:\Users\anaconda3\lib\site-packages\pymoo\model\problem.py”,第 413 行,在 [ret.append(func(x)) for x in X]
文件“C:\Users\anaconda3\lib\site-packages\pymoo\model\problem.py”,第 400 行,在 func self._evaluate(_x, _out, *args, **kwargs)
TypeError:_evaluate() 得到了一个意外的关键字参数“算法”
python - 将参数传递给 pymoo 以便评估函数看到它们
所以只使用 pymoo - 我无法从文档中确定如何传递参数以便评估函数看到它们:
我将两个列表传递给 Myproblem 类,我确实在元组 args 中看到了它们,但是当我在评估中的 args 中查找这些列表时,它只会给我一个空元组。
建议?
python - Pymoo:调用最小化时 int 对象不可调用
所以我运行了示例代码,并为我的问题写了一些额外的东西
当我运行它时,我得到以下输出
我有点困惑问题出在哪里,因为这些函数都不是整数——它甚至没有调用我的评估函数来最小化。
python - 多目标优化
我是 python 的初学者,尤其是优化方面的初学者。我浏览了 pymoo 文档,它们看起来很混乱。我如何从每个具有三个值的点中找到最有效的结果。Pymoo 有这些被称为“问题”的东西,我对如何制作一个感到困惑。任何人都可以简单地解释(任何帮助将不胜感激)谢谢
python - 当达到某个目标值时如何终止最小化(pymoo)
在中,单目标优化 ( docspymoo
)存在以下终止标准:
但是,我不想在达到某些值时停止算法f_tol
,而是在达到某些值时停止算法f_treshold
。所以一旦我的最佳适应度值达到这个值,我希望迭代停止。但是,似乎没有选择。有什么变通办法吗?
python - 遗传算法群体个体作为阵列
我没有太多使用遗传算法的经验,所以我想向社区征求一些有用的意见。我想为我的术语错误道歉。如果需要,请纠正我。
我要优化的问题是孤岛微电网中的最佳潮流。在简单的微电网中,我们有 2 个柴油发电机 (DG)、1 个 PV 阵列、1 个储能系统 (ESS) 和负载。假设我们知道下一周期的负载和光伏阵列输出功率值。
因此,目标函数应最小化为 OPEX 作为每个微电网组件t
在周期内每个时刻的运营成本的总和T
:
其中a
,b
是一些运营成本系数,是柴油发电机二进制(0/1 或 ON/OFF)状态变量,P
是当时微电网组件的输出功率t
。
这里有一些约束(真正的问题几乎没有非线性约束,所以我只写了三个约束):
- 功率平衡
- ESS' 最大卸料深度
- 柴油发电机组功率限制
因此,它是具有非线性约束的混合整数问题。我尝试使用遗传算法来调整问题以解决它。我使用pymoo Python 库通过 NSGA2 算法进行多目标优化。让我们考虑一下,为此T
我们有一些强大的数据:Load
PV
我们有n_var = 5
正在优化的决策变量:. 我们还应该可以访问 的先前值SOC
。我写了一个递归代码来实现一个连续的优化链:
因此,我们为每个时间步初始化了大小为 150 的种群t
,该种群中的个体看起来像. 运行此代码,我得到了这些优化结果:
即使是我在遗传算法方面的一点经验也让我可以说,这种方法是不合适和低效的。
所以,这是我的问题(如果你还在阅读我的帖子:)
有没有办法通过不连续优化设置为 的特定变量来优化此类问题t
,而是将人口中的个体定义为大小为 ( , )的数组?T
n_var
对于描述的问题,人口中的一个人可能看起来像
是否可以实施这种方法?如果是,怎么做pymoo
?
非常感谢您的宝贵时间!任何意见和建议将不胜感激。
python - 在pymoo中使用if函数时出错(ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all())
使用 pymoo 优化函数时,如果我包含 if 语句,则会收到如下错误:
我无法理解此错误的原因,它似乎与 numpy 有关
简化代码如下:
这会产生:
任何建议将不胜感激