python - python scipy.optimize.minimize 定义约束
问题描述
也许是一个非常具体的问题,我正在使用 scipy 优化函数来获取七个变量的新值。这七个值由数组 x0 设置为初始输入。
a, b, c, d
实际上是int
价值。
运行完整代码和最小化功能时,一切正常。
如果我打印我的七个变量在每次迭代后如何演变,我可以看到它们a, b, c, d
被转换为float
小步修改它。
虽然我仍然得到我的最终结果,但如果我可以在某些约束下表明这 4 个变量只是整数,那就太好了,所以优化函数将执行更少的迭代,而不是尝试将变量设置a, b,c ,d
为 8.00000164 或其他浮点但直接到 6,7,8,9,10... 例如
我不确定这是否可能,但如果有人知道如何,我会很乐意学习。
下面是代码的重要部分,显示了如何设置最小化函数。
a = 8
b = 23
c = 54
d = 89
... some code before and after
# FUNCTION - SOLVER CONSTRAINTS
def solver_constraint_1(t):
return t[1] - t[0]
def solver_constraint_2(t):
return t[2] - t[1]
def solver_constraint_3(t):
return t[3] - t[2]
... some code before and after
x0 = [a, b, c, d, 1.0, 1.0, 1.0]
x_bounds = [[0, 20], [10, 60], [20, 80], [60, 100], [0.25, 2.5], [0.25, 2.5], [0.25, 2.5]]
x_cons = ({'type': 'ineq', 'fun': solver_constraint_1},
{'type': 'ineq', 'fun': solver_constraint_2},
{'type': 'ineq', 'fun': solver_constraint_3})
solution = minimize(objective, x0, method='SLSQP', bounds=x_bounds, constraints=x_cons, options={'ftol': 1e-8, 'maxiter': 1000, 'disp': True})
解决方案
为了给出简短的答案,并在上述回复中@kazemakase 的帮助下,在最小化函数中将步长固定为整数是不容易的。实际上,这样做integer programming
是一个比线性规划要复杂得多的问题
推荐阅读
- openstreetmap - 如何定位特定城市的十字路口?
- wordpress - 访问我的网站后,我必须刷新以获取新内容。我使用云端
- sql - 流分析 - 如何使用参考数据进行 FULL OUTER JOIN?
- html - 如果文本从 div 溢出但仍然能够滚动,如何隐藏滚动
- android - 在 Android 项目中使用原生库会导致构建错误
- python-3.x - Word2vector 使用 ELMO - Python
- git - Git: how to rebase onto previous commit
- javascript - 包含 Javascript 的 Angular 7 组件模板
- r - plm包中Ti的分布
- jquery - 如何使用 jQuery 运行 Canvas getContext()