【发布时间】:2021-06-29 17:43:29
【问题描述】:
我需要做一些优化,但我的经验很少,也不是 100% 从哪里开始。
假设我有一个回归方程;
y = exp(intercept + beta1 * x1 + beta2 * x2)
我如何使用 scipy.optimize 来找到 x1 和 x2 的输入,这将使给定的 y 最大化;
intercept = 10
beta1 = 1.1
beta2 = 1.2
Constraints;
(x1 + x2) has to be less than 10
x1 has to be greater than x2
我不想强行使用它(即手动计算 x1 和 x2 的每个组合的 y)。这是一个非常简单的示例,我希望从中学习和构建。
【问题讨论】:
-
约束优化是一件疯狂而美妙的事情。开始的地方是绘制要优化的函数的轮廓(即上面的 y = ...),然后在其上绘制约束(只需将其打印出来并在需要时手动绘制),然后寻找其中轮廓显示最大值,在约束上或约束内。 (顺便说一句,是否有额外的约束 x1 > 0 和 x2 > 0?需要考虑。)如果你走得那么远,请告诉我,我会尝试提供更多建议。 PS。不要排除在网格上评估函数并寻找最大值——这是一个好的开始。
-
感谢您的评论罗伯特。当然,这一切都很有意义,但我的问题是关于使用 scipy 来执行此操作、语法以及如何设置它。编写一个循环并在满足约束的每个状态下评估函数是相当简单的。
-
从 scipy 文档看来,Constrained minimization of multivariate scalar functions 是一个不错的起点。
-
感谢您的建议!
-
@RobertDodier 我看了你建议的文档。我想我需要一个像 linprog() 这样的解决方案,但它只允许我通过将系数作为权重传递来指定一个线性方程。有没有办法像我的例子一样传递非线性函数?
标签: python optimization scipy scipy-optimize-minimize