问题标签 [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-3.x - mystic 可以解决有约束的黑盒优化问题吗?
我想知道是否可以在 python 中使用 mystic 进行约束黑盒优化。如果是这样,此优化包中将提供哪些算法?
python - 神秘约束中的变量占位符
有没有办法在神秘的约束中使用变量名?
IE
以上导致此错误:
编辑:
下面使用的代码试图最小化当前本地点 (x_0, y_0) 和下一个本地点 (x_1, y_1) 之间的 l2 范数,同时遵循约束(物理加速度和转弯半径)。这个距离在速度和航向方面被最小化。
python - 具有行和列级别约束的 Python 线性或二次优化
我正在寻找一种最大化优化解决方案,该解决方案在给定输入矩阵的情况下满足行级和列级约束。
给定 3 家商店(A、B、C)和 3 种产品(X、Y、Z),通过最大化商店供应的加权平均值来优化 1,200 单位库存(X = 600,Y = 500,Z = 100)的放置率(定义如下)。对于每个商店/产品组合,存在现有数量的库存 (e) 和对项目 (v) 的需求。没有商店可以发送超过 400 单位的库存。
供给率=需求/(现有库存+新库存)
目标:最大化按需求加权的商店供应率的直接平均值。
附上说明上述情况的示例。在真实的例子中,商店和物品更多,但逻辑是一样的。首选 python 解决方案,但任何关于如何用任何语言编写优化的指导都会很棒。谢谢!
python - gtol 参数问题 [神秘]
我正在尝试使用 Python 中的神秘库优化函数,并且对gtol参数有一个一般性的问题。
我正在搜索的参数空间是高维(30-40),因此,设置gtol = 40000似乎适合我。奇怪的是,算法似乎在 30000 次迭代后停止,尽管我指定了gtol为 40000,这(据我所知)意味着该算法在停止运行之前应该有 40000 次相同的迭代。
我的函数调用非常基本:
我检查了评价函数的演变,它在第 29000 次迭代时持平。最后 1000 次迭代是相同的,但它已经停止,而不是运行其余 39000 次所需的gtol迭代。
我是否误解了gtol参数?或者我在这里错过了什么?
提前致谢。
optimization - 使用 mystic 解决参数相关的优化问题
我有一个类型的非凸二次优化问题
x' * B * x,
其中 x 的所有条目都在 0 和 1 之间,并且所有条目的总和等于 1。
在 scipy.optimize 我会尝试通过解决这个优化问题
所以我从初始猜测 [0.5, 0.5] 开始,我在每个维度上应用边界 (0,1),等式约束由一个非常窄的双不等式约束处理。
现在我想把它翻译成神秘的,因为 scipy 不适用于高维非凸设置(我感兴趣)。
我无法找到的是如何以一种形式编写约束,这样我只需要提供具有可变维度的矩阵 B。到目前为止,我发现的所有 mystic 示例都执行以下操作:
这是非常冗长的,需要手动插入所有约束和参数等作为我想避免的字符串:每次我需要运行优化方法时,矩阵 B 的维数和形式都会有所不同。我想要的(在一个完美的世界里)会是这样的
那可能吗?
python - 最小化具有线性约束和神秘约束的非凸函数
假设我有一个非凸目标函数loss
,它采用形状为 (n,)的np.ndarray
命名并返回一个数字。目标有很多很多局部最小值,因为它本质上是另一个形状 (n,) 的常量数组的函数。X
float
np.round(X * c, 2)
c
你可以想象这样的事情:
线性约束用两个常数矩阵(也存储为 numpy's ndarray
)表示,A
其形状为 (m, n) b
,形状为 (m,)。我需要在保持的同时loss
最小化。另外,每个元素都必须服从,我有一个不错的初步猜测。X
A.dot(X) == b
X
0 <= X_i <= 2
X0 = [1, 1, ..., 1]
我不需要全局最小值,搜索可以立即停止loss(X) <= 1
。目标主要是用 SQL 编写的,因此速度非常慢,所以我还希望优化在loss
被评估约 200 次时终止。(这不是硬性要求,您也可以在优化运行 5 分钟后终止。)
使用 scipy,我可以做到
我对这个解决方案不满意,因为结果比人为的初始猜测(作为冒烟测试在全局最小值附近采样)更糟糕,这可能是由于局部最小值的丰富和一些数值问题?此外,我无法估计每次迭代的目标调用次数(否则我可以通过设置来限制创新次数maxiter
)。
我怎样才能更好地使用mystic
,这可能更灵活?
python - 具有线性约束的非凸优化
我正在尝试解决类似于下面描述的玩具示例的优化问题。正如评论中所指出的,我目前使用 scipy 的实现太慢了,而且似乎没有收敛。我如何获得一个体面的解决方案?你可以使用 scipy、mystic 或任何你认为合适的库。
请注意,我不需要全局最小值,搜索可以立即停止loss(X) <= 1
。现实世界的目标主要是用 SQL 编写的,因此速度非常慢,所以我还希望优化在loss
被评估约 200 次时终止。(这不是硬性要求,您也可以在优化运行 5 分钟后终止。)
虽然这个问题类似于Minimizing non-convex function with linear constraint 和 bound in mystic,但它绝对不是重复的。这两个问题甚至没有处理相同的目标。
scipy - 使用联合边界/符号约束进行优化
我正在尝试对向量 [a1,a2,a3] 执行最小二乘优化,具有以下约束,其中k
是一个常数:
我将发布我的代码的简化版本,希望这可以清楚地说明我所追求的。
由于初始猜测的生成方式,它位于是a_init
的区域。(我们首先需要使用数值方法的原因是,早期的封闭式方法返回了一个不可行的解决方案。可以提供一个非常糟糕的可行猜测,例如 (0,0,0),但这会很多远离真正的解决方案)。feasibility
False
由于constraint
' 的梯度几乎在所有地方都为零,因此优化例程无法找到离开这个不可行(不可接受)区域的方法,并且它不会成功终止。它仅在SLSQP
1 次迭代后停止,并带有 message Singular matrix C in LSQ subproblem
。使用trust-constr
求解器,它达到了函数评估的最大次数,并且我相信它没有离开不可行区域,因为constr_violation
是1.0
。
据我了解,在 SciPy 中不可能在 and 上提供“联合绑定”(对发明术语表示歉意)a2
,a3
这意味着我被迫使用这种NonlinearConstraint
方法。
这样做的正确方法是什么?(一些搜索表明我可能想尝试mystic
带有符号约束的包。但在我花时间学习这个新包之前,我想看看 StackOverflow 是否有基于 SciPy 的解决方案。或者如果你知道怎么做这在mystic
一些示例代码中会非常有帮助。)
optimization - 差分进化算法不同的运行结果不同
正如标题所说,我正在使用 Python mystic 包中实现的差分进化算法来解决 O(10) 参数的全局优化问题,具有边界和约束。
我正在使用简单的界面diffev
我正在尝试多次运行相同的优化:给定差分进化算法的缩放比例,我运行了 10 倍的优化问题。
结果?对于几乎所有的结果,我得到了不同的答案!
我尝试缩放 0.7、0.75、0.8 和 0.85,所有这些都大致相同的不良行为(如神秘页面上所建议的那样)。
这里有一个例子:在 x 轴上有参数,在 y 轴上有参数值。标签代表迭代。理想情况下,您只想看到一行。
我用 gtol = 3500 运行,所以它应该很长。我使用的是 npop = 10*number pars,ftol = 1e-11,diffev 算法的其他重要参数是默认参数。
有没有人有一些关于用神秘调整差分进化的建议?有没有办法避免结果中的这种差异?我知道这是一个随机算法,但我没想到它在 gtol 为 3500 上运行时会给出不同的结果。我的理解也是这个算法不会陷入局部最小值,但我可能错了。
ps
这与问题无关,只是为了说明为什么这对我很重要。
我的工作需要做的是在上述条件下,针对几个输入数据最小化一个函数:我在 O(10) 参数上针对每个数据配置进行优化,然后带有一些参数的配置给出整体最小值是被选中的人。
现在,如果优化器不稳定,它可能会偶然给我错误的数据配置作为最佳配置,因为我运行了数百个。
python - 使用神秘矩阵输入的非线性整数规划
我是非线性编程的新手,我读到 mystic 在有效解决这类问题方面相当不错。我正在尝试实现这个数学模型(根据本文的多对象最大重叠匹配):
数学模型 大致如下:
我认为这将类似于布尔示例。但我正在处理矩阵输入以找到最佳的最大匹配。Matches(z_ij) 可以是一对一、多对一、一对多的关系,但不能是多对多的。
示例矩阵输入 (C_ij)
我不确定要放置什么边界以及如何设置 ieqn 约束以引用 z_ij