问题标签 [scipy-optimize-minimize]

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.

0 投票
1 回答
374 浏览

mathematical-optimization - 使用只有整数输入的 Python 优化函数

我正在解决 Python 中的一个最小化问题,该问题以使整个网络/图形中的数据包丢失最小的方式在图的边缘上分配数据包容量。数据包在节点上按照泊松分布生成。问题是 scipy.optimize.minimize() 不能只接受整数作为目标函数loss_obj(x)的输入。它对满足约束的所有浮点值进行操作。方法find_loss()查找边e的损失,假设k作为其容量。我只粘贴下面的优化函数,因为原始代码超过 300 行。

这是显示的输出:

虽然我在这里展示了一个只有 24 个元素的向量来演示这个问题,但我的网络有 104 个边,因此无法用 scipy.optimize.brute() 或 itertools.combinations() 解决,因为系统无法处理太大的数组并给出一个内存错误。线性规划问题不是我的目标,所以 PuLP 不是一个好的解决方案。有人可以找出一种方法来最小化整数输入函数吗?

0 投票
1 回答
18 浏览

python - Scipy 非常奇怪地拟合并创建了多个拟合曲线,这不应该是这种情况,我知道曲线拟合不会返回多条曲线

这是我的代码

试图拟合下面的曲线是我认为指数衰减应该做的方程,但我得到的是完全糟糕的结果

注意:我需要使用对数刻度进行绘图,这是有意义的

在此处输入图像描述

我的示例数据看起来如何(不幸的是,很难将所有数据都放在这里)xp(示例)为了 SO 而转换为列表

0 投票
0 回答
163 浏览

python-2.7 - scipy.optimize.minimize() 约束取决于成本函数

我正在使用scipy.optimize.minimize(method='COBYLA').

为了评估成本函数,我需要运行相对昂贵的计算来根据输入变量计算数据集,而成本函数是该数据集的一个(计算成本低)属性。但是,我的两个约束也依赖于昂贵的数据。到目前为止,我发现约束优化的唯一方法是让每个约束函数重新计算成本函数已经拥有的相同数据集。

简化的准代码:

所以我有一个通用的“评估一些成本”函数,它运行昂贵的计算,然后评估它给出的任何标准。但它需要为优化器的每次迭代运行 3 次。

我还没有找到任何方法来设置x用于生成的东西data,然后将其传递给目标函数和约束函数。

这样的事情存在吗?我注意到 的callback参数minimize(),但这是一个在每一步之后调用的函数。我需要某种预处理器,在每一步x 之前调用它,然后使用其结果而不是x. 也许有办法以某种方式潜入它?我想避免编写自己的优化器。

解决此问题的一种传统方法是将违反约束的惩罚函数添加到主成本函数中,并在没有显式约束的情况下运行优化器,但我之前尝试过,发现主成本函数在在违反约束的情况下,优化器可能会卡在某个违反约束的地方而无法再次发现。

代码需要在 Python v2.7.6 到 2.7.13 和 scipy 0.13 到 0.17 的机器上工作。

0 投票
1 回答
137 浏览

python-3.x - 最小化问题 TypeError: 'numpy.float64' object is not callable

所以我试图使用优化的最小化来最小化给定参数的数组函数,它给了我这个错误:

回溯(最后一次调用):文件“plot2.py”,第 72 行,在 res = minimum(rosen(al,c), c, args=(al)) 文件“/home/usd/.local/lib/ python3.6/site-packages/scipy/optimize/_minimize.py”,第 604 行,在最小化返回 _minimize_bfgs(fun, x0, args, jac, callback, **options) 文件“/home/usd/.local/lib /python3.6/site-packages/scipy/optimize/optimize.py”,第 1003 行,在 _minimize_bfgs old_fval = f(x0) 文件“/home/usd/.local/lib/python3.6/site-packages/scipy /optimize/optimize.py", line 327, in function_wrapper return function(*(wrapper_args + args)) TypeError: 'numpy.float64' object is not callable

这是代码:

0 投票
1 回答
403 浏览

python-3.x - Scipy optimize.minimize 具有 2 个实变量和 1 个参数的复杂函数

我正在寻找最小化具有 2 个变量和 1 个常数的非线性复函数。我发现了一个关于如何最小化复杂函数的问题,我认为它有效(?)我还没有尝试过,因为我想首先解决多变量一个参数问题。

例如一个超级简单的实函数:

我可以对 3 个参数进行最小化,但不能对 2 个变量 1 个常数进行最小化。如果我做

它工作正常。

我发现这个问题有人问过与我类似的问题,但答案对我不起作用,答案说要做:

但这给了我错误,即使只是以这种方式最小化 3 也会minimize(function, 2, 4, 5)给我很多错误行,并且以这种方式minimize(function, (2,4,5))给出了>missing 2 required positional arguments: 'y' and 'a'..

接下来对于复杂的事情,在答案中我看到它说将函数分成2个实际函数,用最小化解决它们,然后将两个结果融合为一个。但我不确定我是否理解,所以如果有人可以帮助我。该函数是一个复函数(实部和虚部),但输入(2 个变量 1 个常数)是实数。

也许有一个包可以做到这一点?

0 投票
1 回答
269 浏览

python - 当我在做 scipy.optimize.minimize 时,我得到了索引错误

我打算计算目标函数的最大值。我的编码如下。

但我得到了错误:

我应该怎么办??? 太感谢了。

0 投票
1 回答
169 浏览

python - SciPy“成功”找到不正确的最佳解决方案和“不成功”找到最佳解决方案(投资组合构建)

我正在构建一个交易机器人,并且我正在尝试实施一个优化器以在遵守某些约束的同时最大化 alpha。

我的变量是一个包含投资组合中证券权重的向量。我还有一个向量,其中包含每种证券各自的 alpha 分数。我的目标函数是 -sum(weights*alphas) (以最小化负 alpha)。我的限制是:

  • 投资组合中股票的最小和最大权重
  • 最低交易量(占投资组合总价值的百分比 - 交易成本是固定的,所以如果只是几个基点变化,我不想交易)
  • 最大营业额(最大总交易价值占投资组合总价值的百分比)
  • 绝对权重之和必须为 1
  • 权重之和必须等于 0(长/短)或 1(仅长)

我在下面创建了一个类,它使用 scipy.optimize.minimize 来实现它:

如您所见,我没有使用 min_trade 约束,稍后我将在问题中涉及到这一点。

这是我传递给它的两个示例(这些示例仅包含 4 只股票,并且在正确的实现中,我希望传递 50-100 证券的数组):

一种)

b)

对于这个长短示例,我从 a) 得到的结果是:[-0.1, -0.4, 0.25, 0.25],这显然不是最优的 [-0.1, -0.4, 0.4, 0.1]。

我收到这条消息:

它说它成功地找到了最小值......这就像它试图最大化营业额约束。这是因为初始权重不遵守约束吗?如果是这样,我该如何修改它,理想情况下我想将投资组合的当前权重作为 x0 传递给它。

在 b) 中,我得到了最佳解决方案 [-0.1, -0.4, 0.4, 0.1] 但我得到的 result.success 为 False。

我也收到这条消息:

我认为这条消息可能意味着它无法随着变化而增加/减少目标函数,因此它不知道它是否至少,如果我错了,请纠正我。尽管我不太确定如何以最佳方式设置它,但我尝试过使用 ftol 设置无济于事。

有没有办法修改这个优化器,以便 a) 它达到最佳解决方案并相应地产生正确的状态,并且 b) 可以采用不符合约束的初始权重?未来的希望是还包括部门和行业限制,这样我就不会在某些领域过度投资。

另外,作为一个附带问题(尽管不像我想让它开始工作那么重要):我如何实施最小交易限制?我希望股票根本不交易,或者它的交易价值超过这个数量,或者交易掉它的全部价值(如果它小于投资组合中的 min_trade 权重,则权重为零)。

正如您所看到的,这是一个很长的问题,但我非常感谢您能为这个问题提供的任何帮助、指导或答案!请要求任何澄清或额外信息,因为这花了我很长时间才拼凑起来,而且我可能没有很好地解释某些东西或遗漏了一些东西。谢谢!

0 投票
1 回答
156 浏览

python - Scipy.optimize 最小化“不兼容的不等式约束”

我试图将 100 种证券的投资组合的差异最小化。

annereturn.cov() 是一个 100x100 的数据帧。输出与我开始时相同的 0.01 偶数权重和此失败消息:

状态:4 成功:假

0 投票
1 回答
27 浏览

python - 当我使用 scipy.optimize.minimize() 最小化目标函数时,为什么我的目标函数的矩阵参数会发生变化?

目标函数 我正在尝试进行时空自动回归(STAR)。下面的代码基本上定义了我需要最小化的上述目标函数,其中 Y 是 N×K 矩阵,D 是 N×N 矩阵。

优化出错了,所以只添加了第一个块来检查究竟是哪一部分出错了。我scipy.optimize.minimize( )用来最小化目标函数。

但是,当我运行以下命令时,优化失败并打印出矩阵 D。结果不知何故,Y 已分配给 D,因此 D 不再是 N×N 矩阵。

我觉得很混乱。为什么D完全改变了?这是否发生在其他人身上?有人帮我吗?

0 投票
1 回答
18 浏览

python - 如何使用 scipy.optimize.minimize() 指定目标函数最小化的参数?

假设我有一个目标函数f(a,b,c)。我想找到最小化它的b值,保持ac不变,并尝试ac的不同组合,我不想将f(a,b,c)写为g(b)

那么我如何指定bf(a,b,c)应该最小化的参数?该参数是否必须表示为x?或者我应该将b作为f的第一个参数?