scipy.optimize.minimize - 多变量优化

问题描述

我希望在某些约束下最小化目标函数

我希望最小化的函数是:

def distance_function(choice_matrix,distance_matrix,factory_distance):
  hub_to_demand_distance = distance_matrix.dot(choice_matrix)
  hub_factory_distance = pd.concat([hub_to_demand_distance,factory_distance],axis=1)
  min_dist_to_demand = pd.DataFrame(hub_factory_distance.min(axis=1))
  transposed_choice = choice_matrix.T
  factory_to_hub = transposed_choice.dot(factory_distance)
  total_distance = min_dist_to_demand.sum(axis=0)+factory_to_hub.sum(axis=0)
  return total_distance

这些是我定义的约束:

cons = (
    {'type':'ineq','fun': lambda f: 1-choice_matrix[0][0]-choice_matrix[1][0]},{'type':'ineq','fun': lambda f: 1-choice_matrix[0][1]-choice_matrix[1][1]},'fun': lambda f: 1-choice_matrix[0][2]-choice_matrix[1][2]},'fun': lambda f: 1-choice_matrix[0][3]-choice_matrix[1][3]},{'type':'eq','fun': lambda f: choice_matrix[0][0]+choice_matrix[0][1]+choice_matrix[0][2]+choice_matrix[0][3]-1},'fun': lambda f: choice_matrix[1][0]+choice_matrix[1][1]+choice_matrix[1][2]+choice_matrix[1][3]-1}
)

我已经尝试使用 Scipy Optimize 来最小化如下所示的功能

optimize.minimize(distance_function,choice_matrix,args=(distance_matrix,factory_distance),method='SLSQP',jac=None,constraints=cons)

当我运行这个时,我收到以下错误

ValueError:点积形状不匹配,(4,4) vs (8,)

你能告诉我:

  1. 为什么会发生这种情况以及需要做什么?

  2. 在我展示的代码中,我将选择矩阵设为 4 行和 2 列,因此我手动定义了 6 个约束(约束是每行中元素的总和应小于或等于 1。另一个约束是每列中元素的总和应等于 1) 我的问题是,如果我的选择矩阵有 40 行和 5 列,是否有比手动输入 45 行更好的方法来定义约束?

预先感谢您的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)