问题描述
我希望在某些约束下最小化目标函数。
我希望最小化的函数是:
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 (将#修改为@)