如何解决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,)
你能告诉我:
-
为什么会发生这种情况以及需要做什么?
-
在我展示的代码中,我将选择矩阵设为 4 行和 2 列,因此我手动定义了 6 个约束(约束是每行中元素的总和应小于或等于 1。另一个约束是每列中元素的总和应等于 1) 我的问题是,如果我的选择矩阵有 40 行和 5 列,是否有比手动输入 45 行更好的方法来定义约束?
预先感谢您的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。