问题标签 [mystic]
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 - 在 Python mystic 中根据条件最大化总和
我正在尝试为酒店收入管理系统构建关于动态房间定价模型的白皮书的实施。万一此链接将来失效,我将在此处粘贴相关部分:
到目前为止,我目前的实现被严重破坏,因为我真的不完全理解如何求解非线性最大化方程。
任何熟悉 mystic 的人都可以给我一些关于如何实现它的建议吗?
python - 受约束的全局优化调优[神秘]
背景
汽车应用程序的自动调谐器:应用程序可能会根据汽车的型号而变化,因此目标函数自然也会发生变化。问题是将参数调整为特定车型的最佳参数。输入:车型,输出:针对特定车型的应用程序的最佳参数。我想通过优化来解决这个问题
我试图最小化一个复杂的非线性函数,受两个非线性约束,一个不等式和一个等式约束的约束。问题本身并没有限制,但无论如何我已经对参数进行了限制,以帮助加快优化,因为我或多或少地知道正确参数的位置。参数是:[x0,x1,x2,x3]
我已将 scipy.optimize.minimize() 函数与 SLSQP 方法一起使用,并在问题得到正确界定时发现了良好的结果。虽然, scipy.optimize.minimize() 函数是一个局部优化器,它解决了我认为不是我的问题的 QP 问题。因此,我开始使用 mystic (mystic.differential_evolution) 的全局优化方法。由于我不是全局优化方面的专家,我自然会有一些问题。
问题
如果我选择的边界太宽,优化器(mystic.differential_evolution)将在一段时间后停止迭代并打印:
STOP("ChangeOverGeneration with {'tolerance': 0.005, 'generations': 1500}")
当我运行优化器找到的解决方案时,我发现结果不如我降低(缩小)边界那么好。显然,全局优化器还没有找到全局最优值,但它停止了迭代。我知道有多个参数集会产生相同的全局最小值。
由于目标函数可能会随着汽车模型的变化而变化,我希望边界保持相对宽泛,以防全局最优值发生变化,从而改变正确的参数。
问题
- 如何调整优化器的设置以使其继续搜索并找到全局最优值?
- npop = 10*dim 规则是解决问题的好方法吗?
- 我可以拓宽优化器搜索算法的视野,让它找到它错过的最佳参数吗?
代码
python - 非线性规划中的整数决策变量
我想最大化两个linear
函数的商。我希望我的决策变量在Binary
这里,即它们必须integers
并且只能取值0
和1
。
我想知道我怎样才能做到这一点?我正在寻找使用类似的算法SLSQP
并且我已经看过scipy
但遗憾的是它并没有将决策变量的值限制为二进制和整数。
有谁知道一个具有易于理解的界面的库,我可以使用它来实现这一点?或者是否有任何方法可以通过scipy
自身实现这一目标。我读过这个问题:Restrict scipy.optimize.minimize to integer values
但是在提供的三种解决方案中,我认为它们中的任何一种都不是有效的。如果可以提供任何帮助,那将非常有帮助。
python - 为神秘提供不等式/约束的向量
我正在尝试为函数最小化提供约束,迄今为止我一直使用通过 scipy ( scipy.optimize.fmin_l_bfgs_b()
) 可用的无约束算法成功执行该函数。
阅读(例如,参见Python constrained non-linear optimization),我发现了一个最小化打包调用mystic
,这似乎是我需要的。我的情况如下。我有一个3N
变量函数(表示N
节点的 xyz 位置坐标),我想提供一个约束列表,以便z/x = const.
为每个节点提供。这造成了总的N
约束。我如何最有效地定义/提供这些约束mystic()
?是否也可以使用相同的约束对象scipy.optimize.slsqp()
?由于我的约束是线性的,因此这也应该是一个可行的选择。
我尝试了以下方法,但它使我的计算机崩溃了:
python - 求解不可行的不等式系统
我正在尝试解决附加的非线性优化问题。我想尝试一下 mystic,因为 SciPy.optimize 不能按预期工作(下面有更多详细信息)。
因为c_1 = 3,所以问题不可行。这是因为 (p_1 - 3 - 0.22) / p_1 < 0.05 意味着 p_1 必须大于 3.22,这将与 p_1 / 2.2 <= 0.65 冲突。
这里存在一个未解决的问题,解决了 SciPy 成功终止不可行问题的基本问题。不幸的是,我需要用 python 解决这个特定的问题,这就是我再次在这里碰运气的原因。
当我使用 SciPy.optimize 时,程序也成功终止,打破了约束而没有引发问题(即使设置 keep_feasible=True)。我的问题更大,也无法满足其他约束。因此,SciPy 似乎不适合这项工作。
我的第一个问题:我做错了什么吗?如果没有:是否有 SciPy.optimize 的替代品?我也一直在研究神秘主义,但根本无法让它发挥作用。
我知道这是一个相当具体的问题,所以我感谢所有想要参与的人。最后,如果我因问题的可能不正确的表述冒犯了任何数学家,我深表歉意。
python - Mystic 的优化和线性不等式
我正在处理一个相当复杂的目标函数,我通过改变 4 个参数来最小化它。不久前,我决定使用 Python 框架Mystic,它无缝地允许我对复杂的不等式使用惩罚(这是我需要的)。
然而,Mystic 有一种不太明显的方式来分配硬约束(不是不等式和非绑定约束,仅参数之间的线性不等式),甚至更不明显的方式来处理它们。
我所有的 4 个参数都有有限的下限和上限。我想添加一个线性不等式作为硬约束,如下所示:
但是如果我尝试以这种方式使用 Mystic:
然后 Mystic 坚持调用目标函数先解决约束,然后进行实际优化;由于目标函数值对上面定义的约束函数没有影响也没有任何影响,所以我不确定为什么会发生这种情况。上面定义的约束函数只是告诉 Mystic 超参数搜索空间的一个区域应该是禁区。
我已经搜索了 Mystic 文件夹中的几乎所有示例,并且偶然发现了另一种定义硬约束的方法:使用惩罚函数,然后调用魔术方法“as_constraint”将其“转换”为约束。不幸的是,所有这些例子都是这样的:
有一条神奇的线:
我看不到它在做什么——求解器变量不再使用。
那么,对于这个问题:有没有办法在 Mystic 中定义线性不等式,不涉及昂贵的约束预求解,而只是告诉 Mystic 排除搜索空间的某些区域?
提前感谢您的任何建议。
安德里亚。
python - 使用 Mystic 的差分进化函数时参数值的界限不正确
我目前正在使用化学反应网络理论 (CRNT) 来研究胰岛素信号传导的双稳态。使用 CRNT,我需要解决具有约束的全局优化问题以获得鞍节点。我已经研究了多种算法来解决我的问题,但是,由于我的问题是非线性和非凸的,并且可能是多模态的,我发现只有少数几种方法是合适的。我发现差分进化(DE)似乎是最合适的开始。由于我没有优化领域的专业知识,我一直在寻找一个 Python 库,它可以像我的目标函数和约束的黑盒一样。经过快速搜索,我发现 Mystic 提供了一个看起来相当简单易用的 DE 功能。但是,当我实现 DE 功能时,
我已经在一个非常简单的问题上实现了 DE 函数,并获得了很好的结果。除此之外,我还尝试了 npop、gtol 和 maxiter 的较大值。npop 大约 5000 的值提供了接近我想要的范围的值,但是有些值仍然不在我给出的范围内(可能非常大的 npop 值会给我想要的结果)。似乎没有什么可以解决参数值超出我指定的范围的问题。下面是我正在运行的确切代码。
运行它,我得到以下输出。
最小化的反对函数值 1.216082506137729
Parameter values [1.07383892e-01 9.99893116e+01 8.88912946e+01 9.99859090e+01 1.09022526e-01 9.99587677e+01 9.70349805e+01 1.23842240e+01 4.72484236e+00 -1.01491728e-08 -1.01491720e-08 1.00002390 e-01]
如您所见,为参数值提供的向量提供了 -1.01491728e-08 和 -1.01491720e-08 的值,它们应该在 (-0.1,0) 范围内。
我是否只是在 Mystic 中错误地实现或误解了某些东西,或者我是否需要探索不同的算法来解决我的优化问题?如果您建议使用不同的算法会更好,您是否建议我使用散点搜索(SS)?另外,Mystic 是否提供可以执行 SS 的功能,还是我需要自己实现它?
任何帮助,将不胜感激。
python - 关于通过神秘包设置约束的问题
我正在尝试在神秘包的帮助下设置约束以执行优化。
我在 Spyder 和 PyCharm IDE 中执行了代码。在这两种情况下,内核都崩溃了。当我只有 2 行字符串“简化”时,方法可以正常工作。尝试设置大于 2 行的约束会导致内核死亡。
python - 神秘优化器的不收敛
我正在尝试优化功能objective
。
full_constr_data
由 6 类目标组成,每个目标按年份划分,每年由基于项目的数据表示。因此,我通过functionfull_constr_data
的参数对项目进行加权,例如意味着“目标 #0,年份 #2,项目 #3 的加权结果存储在变量中。x
objective
full_constr_data[0][2][3] * x[3]
x[3]
full_constr_data_weighted
下一步是对full_constr_data_weighted
. 例如,将目标 #0、第 2 年的所有项目相加:
full_constr_data_weighted[0][2][0] + full_constr_data_weighted[0][2][1] + ... + full_constr_data_weighted[0][2][n]
其中'n' - 项目总数。数据存储在变量中full_sum
。
之后,我正在计算概率。我从变量中取分位数,constr_mod
并根据该值计算超过分位数的概率。constr_mod
并且full_sum
具有完全相同的结构,但是对于每个目标 # 和接下来的一年 #constr_mode
包含一个值,同时full_sum
具有值向量(分布)。计算出的概率存储到变量my_prob
中。
最后,我总结了my_prob
. 我必须优化这个总和:使其尽可能大(注意return
语句中的减号)。
优化问题有一个不等式约束:obj
加权向量的总和x
应大于 1000。解释obj
为每个项目的 NPV。
我使用diffev2
from package mystic
。
变量full_constr_data
, constr_mod
, pen_mult
,obj
存储在my_data.spydata file
:通过 Google Drive 下载
不幸的是,优化没有收敛:
有什么建议可以解决这个非凸问题吗?
python - 在神秘中添加线性不等式约束
我正在尝试通过对具有 100 个变量的问题使用神秘来实现具有 16 个线性不等式约束和一个线性等式约束的非线性优化。当我使用 linear_symbolic 模块创建约束时,执行卡住了。我发现没有其他明显的方法来添加约束。
Scipy 的最小化模块为不是二次型的目标函数(我的目标是相对熵)产生了不好的解决方案,并且当起始值不是很接近最优解决方案时,我不得不放弃它。这实际上是 Mike McKerns 在激励神秘主义者时提出的观点,所以当我碰到它时我很高兴。
我尝试了以下两行:
其中 G 是一个 16x100 的系数矩阵,h 是一个 16 维向量,包含不等式右侧的常数。
代码在上面的第一行执行相对较快,但它从不通过第二行(我的计算机在长时间等待后崩溃)。