微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

scipy.optimize.minimize - 多变量优化

如何解决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 举报,一经查实,本站将立刻删除。