我正在尝试编写一个遗传算法来决定哪些客户应该从哪些仓库获得服务,哪些仓库可以关闭。
我已经编写了大量的功能,并且在计算适应度函数时遇到了困难。GA将每个仓库表示为0(关闭)或1(打开),因此如果有7个仓库,它将表示为0000011 (前5个仓库关闭,下一个2个打开)。
然后,我遍历并计算每个开放仓库到客户的距离,并将结果放入下面的数据框中,其中PostcodeFrom表示仓库。如果我们以TS24 3xx为例,我们可以看到,如果它是由NE38 9XX提供的,它的成本是169.558740订单里程,而如果它是由CV10 7xx提供的,它的成本是1531.390340,因此很明显,该客户应该从NE38 9xx获得服务。
PostcodeTo PostcodeFrom ToLat ... orderMiles volumeMiles transportCost
0 TS24 3xx NE38 9xx 54.711137 ... 169.558740 1695.587397 2034.704877
1 EN11 0DJ NE38 9xx 51.758065 ... 4521.600265 45216.002652 27129.601591
2 TS24 3xx CV10 7xx 54.711137 ... 1531.390340 15313.903396 18376.684075
3 EN11 0DJ CV10 7xx 51.758065 ... 1625.645014 16256.450144 9753.870086我想要做的是创建一个新的数据表(或更改此表),以便只包含该客户(PostcodeTo)的最小成本(订单里程)的行。因此,对于TS24 3xx,将仅显示上述示例中的行0,对于EN11 0DJ,例如,应仅显示行3。
PostcodeTo PostcodeFrom ToLat ... orderMiles volumeMiles transportCost
1 TS24 3xx NE38 9xx 54.711137 ... 169.558740 1695.587397 2034.704877
2 EN11 0DJ CV10 7xx 51.758065 ... 1625.645014 16256.450144 9753.870086我认为这样做的方法是某种类型的查询,我们选择每个邮政编码最低顺序里程的行,然后复制到另一个数据帧,但是我不知道如何做到这一点。另一个复杂的问题是,仓库每次运行都会发生变化。
发布于 2020-06-25 18:32:07
您可以尝试这样做:
df.loc[df.groupby("PostcodeTo").idxmin().reset_index()["orderMiles"]]https://stackoverflow.com/questions/62573105
复制相似问题