目录
一、问题
假设我们需要从北京(0号节点),运送一批货物到上海(7号节点),中间的1-6号节点都是中转站。如上图所示。
不同的节点有不同的发送货物的上限,比如0发往1,最多发3吨,0发往2,最多发2吨,1可以发往4/5号节点,分别是最多5吨和1吨。
如何能使从北京发往上海的发送的货物重量达到最大?
二、流程
①确定目标
一次发送的货物重量最大,说明从0号节点出发的时候,量最大,因此,我们的目标就是:
其中,x01代表从0号节点到1号节点的货物重量。
②确定条件
根据“发送的货物重量等于接收的货物重量”,我们有如下条件:
③寻找工具
根据我们的目标函数,我们可以知道该问题属于线性规划,于是我们可以搜索是否有相关的库,比如搜索python linear programming library
④工具解读
后面还有更多详细的有关这个工具的解释。
根据描述,我们需要设置一些参数:
最小化的目标函数是c.T @ x的形式;条件中的A_eq, B_eq;x的取值范围
⑤参数设置
由于我们的问题是最大化问题,因此加个负号,转为最小化问题。因此:
由于c是要和x进行矩阵运算的,并且原本的x01+x02+x03由于转成了最小化问题变成-x01-x02-x03
所以c中每一个数字对应到每一个x参数上之后,把前三个设置为-1
我们的限制条件是类似于x26=x67,也就是x26-x67=0,因此,对应位置置为1或者-1即可,其他地方置为0,对于所有的条件都这样写。
对于x的取值范围,直接形成一个元组形成的列表即可。