当前位置: 首页 > 知识库问答 >
问题:

在接触所有客户的同时尽量减少商店的数量

宰烈
2023-03-14

在这期特别的文章中,我有一个被分割成方块的想象中的城市--基本上是一个覆盖城市的MxN方块网格。M和N可以比较大,所以我有超过40,000平方单元格的案例。

另外,我还有以下几个限制/问题:

  1. 顾客可以旅行的最大距离-如果商店在一个太远的单元格中,则不能将顾客与该商店关联。编辑:这不是一个真正的距离,这是一个衡量一个顾客到达一个商店的容易程度,所以我不能使用圆圈……
  2. 在遵守上述条件(1)的情况下,同一顾客的到达距离内很可能有多个商店。在这种情况下,距离最近的商店应该会赢。

目前,我试图忽略成本问题--顾客多意味着店铺大,成本高--但也许在某个时候,我也会考虑到这一点。问题是,我不知道我正在研究的问题的名字,也不知道它可能的算法解决方案:这能作为线性规划问题来解决吗?

我通常是用Python编写代码的,所以任何关于可能的算法方法和/或一些代码/库来解决这个问题的建议都将非常感谢。

提前谢谢你。

编辑:作为后续,我发现我可以把这个问题作为一个MINLP“无能力设施问题”来解决,但是我找到的所有信息都太复杂了:我不关心哪个顾客是由哪个商店服务的,我只关心一个商店是不是建在哪里。我有一个次要的方法--作为后期处理--将一个客户关联到最合适的商店。

一定有更简单的方法来处理这件事...

共有1个答案

长孙明知
2023-03-14

我认为这可以制定为一套涵盖问题环节。

你说:

在像我这样的情况下,我可以很容易地得到一个有数百万行和列的线性系统,用整数/二进制变量来求解,大约需要宇宙的年龄

----     22 PARAMETER cloc  customer locations

                  x           y

cust1            35          75
cust2           169          84
cust3           111          18
cust4            61         163
cust5            59         102
...
cust497         196         148
cust498         115         136
cust499          63         101
cust500          92          87

下一步是为每个客户c确定可到达的允许位置(i、j)。我为此创建了一个大型稀疏布尔矩阵reach(c,I,j)。我用了一条规则:如果曼哈顿距离是

  |i-cloc(c,'x')|+|j-cloc(c,'y')| <= 10

那么(i,j)处的商店就可以为顾客C服务。我的数据看起来像:

(不存储0)。这个数据结构有106k个元素。

----     47 VARIABLE numStores.L           =          113  number of stores

----     47 VARIABLE placeStore.L  store locations

              j1          j6          j7          j8          j9         j15         j16         j17         j18

i4                                                                                                             1
i18                                                            1
i40                                                                                    1
i70            1
i79                                                                                                1
i80                        1
i107                                                                                   1
i118                                   1
i136                                                                       1
i157                                               1
i167                                                                       1
i193                                               1

   +         j21         j23         j26         j28         j29         j31         j32         j36         j38

i10                                    1
i28                                                                        1
i54                                                            1
i72                                                                                    1
i96                                                1
i113                       1
i147                                                           1
i158                                                                                                           1
i179                                                                                               1
i184                       1
i198           1

   +         j39         j44         j45         j46         j49         j50         j56         j58         j59

i5                                                                                                             1
i18                                                1
i39            1
i62                                                            1
i85                        1
i102                                                                       1
i104                                   1
i133                                               1
i166                                                                                               1
i195                                                                                   1

   +         j62         j66         j67         j68         j69         j73         j74         j76         j80

i11                                                                                                1
i16                                                1
i36                                                            1
i61                                                                                    1
i76                                                                        1
i105                                                                       1
i112           1
i117                                                                                                           1
i128                                   1
i146                                               1
i190                       1

   +         j82         j84         j85         j88         j90         j92         j95         j96         j97

i17                                    1
i26            1
i35                                                                                                1
i48                                    1
i68                                                                        1
i79                                                                                                            1
i97            1
i136                       1
i156                                               1
i170                                   1
i183                                                                                   1
i191                                                           1

   +         j98        j102        j107        j111        j112        j114        j115        j116        j118

i4                                                                         1
i22                                                                                    1
i36                                                            1
i56                        1
i63                                                1
i68                                                                                                            1
i88                                                                                                1
i100                                                                                   1
i101           1
i111                                                                                                           1
i129                                                           1
i140                                   1

   +        j119        j121        j126        j127        j132        j133        j134        j136        j139

i11                                                            1
i30                                    1
i53                                                1
i72                                                                                                1
i111                                                                                                           1
i129                                                                                   1
i144                                                                       1
i159           1
i183                                                                                               1
i191                       1

   +        j140        j147        j149        j150        j152        j153        j154        j156        j158

i14                                                            1
i35                        1
i48                                                                        1
i83                                                                                                1
i98                                                1
i117                                                                                                           1
i158                                                                                   1
i174                                   1
i194           1

   +        j161        j162        j163        j164        j166        j170        j172        j174        j175

i5                                                                         1
i32            1
i42                                                                                                1
i61                                                                                    1
i69                                                                        1
i103                                                           1
i143                                   1
i145                                                                                                           1
i158                                                                                               1
i192                       1
i198                                               1

   +        j176        j178        j179        j180        j182        j183        j184        j188        j191

i6                                                                         1
i13                                                                                                            1
i23                                                1
i47                                                                                                            1
i61                                                                                    1
i81                        1
i93            1
i103                                                                                                           1
i125                                   1
i182                                                           1
i193                                                                                               1

   +        j192        j193        j196

i73                                    1
i120           1
i138           1
i167                       1

注意,宇宙的年龄是137亿年或4.3e17秒。所以我们实现了1E17左右的提速。这是我的纪录。

注意,这个html" target="_blank">模型没有找到商店的最佳位置,而只是一个配置,使为所有客户服务所需的商店数量最小化。在这个意义上它是最优的。但该解决方案不会最大限度地减少顾客和商店之间的距离。

 类似资料:
  • 我有一个清单,上面有我想买的n个项目。(每项不同) 我的解决方案1我使用暴力DFS和记忆。这给出了最优解,但具有昂贵的复杂性(O(N!))不符合我的要求。(k和n有时可达300) 我的解决方案2我使用了一个贪婪的解决方案,在这个解决方案中,我会访问在我的清单上提供最大数量商品的商店。购买项目,并从列表中删除所有这些项目。我重复这个,除非我的购物清单不是空的。(所需物品均不买) 虽然解决方案2运行得

  • 我运行jmeter脚本将近一周,今天观察到一件有趣的事情。以下是场景: 概述:我正在逐渐增加应用程序的负载。在上一次测试中,我给应用程序加载了100个用户,今天我将加载增加到150个用户。 150名用户测试结果: > 与上次测试相比,请求的响应时间减少了。(这是个好兆头) 吞吐量急剧下降到上一次测试的一半,负载更少。 我的问题是: > 当我的许多请求失败时,我得到了好的响应时间吗? 注:直到100

  • 本文向大家介绍要减少DOM的数量有什么办法吗?相关面试题,主要包含被问及要减少DOM的数量有什么办法吗?时的应答技巧和注意事项,需要的朋友参考一下 类似长列表的话可以只渲染可视区域的DOM元素(比如10个),上面用空的DIV或者padding撑开 阴影效果、清除浮动等的使用伪元素 操作列表等大量的DOM元素,可以创建文档片段节点(Fragment)作为父节点,然后将操作DOM元素移步到Fragme

  • 本文向大家介绍magento 获取所有Magento商店,包括了magento 获取所有Magento商店的使用技巧和注意事项,需要的朋友参考一下 示例 返回Mage_Core_Model_Store模型数组。

  • 减少图层数量     初始化图层,处理图层,打包通过IPC发给渲染引擎,转化成OpenGL几何图形,这些是一个图层的大致资源开销。事实上,一次性能够在屏幕上显示的最大图层数量也是有限的。     确切的限制数量取决于iOS设备,图层类型,图层内容和属性等。但是总得说来可以容纳上百或上千个,下面我们将演示即使图层本身并没有做什么也会遇到的性能问题。 裁切     在对图层做任何优化之前,你需要确定你

  • 本文向大家介绍为什么C ++程序员应尽量减少对“新”的使用?,包括了为什么C ++程序员应尽量减少对“新”的使用?的使用技巧和注意事项,需要的朋友参考一下 new用于动态内存分配。在这种情况下分配的内存在堆上。与这种类型的内存分配相关联的一些成本以及程序员必须进行手动的内存清理和管理。在以下情况下必须使用这种分配类型:  您不知道在编译时需要多少内存。 您想要分配在离开当前块后仍将保留的内存。 除