繁体   English   中英

python scipy.optimize.minimize定义约束

[英]python scipy.optimize.minimize define constraints

也许是一个非常具体的问题,我正在使用scipy优化函数来获取七个变量的新值。 七个值由数组x0设置为初始输入。 a, b, c, d实际上是int值。

当运行完整的代码和最小化功能时,一切运行正常。

如果我打印出每次迭代后我的七个变量如何变化,我可以看到a, b, c, d被转换为float以小步对其进行修改。

虽然我仍然可以得到最终结果,但是如果我可以在某种约束条件下指出那4个变量仅是整数,那将是很好的选择,因此optimize函数将执行较少的迭代,而不必尝试设置变量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比线性编程要解决的问题要复杂得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM