V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
leegradyllljjjj
V2EX  ›  程序员

兄弟萌,这种场景比较类似于哪一种算法模型?

  •  
  •   leegradyllljjjj · 2023-07-04 09:12:01 +08:00 · 1887 次点击
    这是一个创建于 533 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个 8 层 2 列的货架,货物零星散落在某些货位上,货架上有某些空货位,怎么样通过调整把重的货物尽量通过这些空货位中转以便把货架的重心降到最低?
    17 条回复    2023-07-06 15:30:51 +08:00
    leegradyllljjjj
        1
    leegradyllljjjj  
    OP
       2023-07-04 09:18:58 +08:00
    dayeye2006199
        2
    dayeye2006199  
       2023-07-04 09:19:19 +08:00 via Android
    非线性整数优化(取决于重心是怎么算的)

    不追求最优的话,建议整个遗传算法什么的,算个几步给个最好的结果就行
    paopjian
        3
    paopjian  
       2023-07-04 09:20:00 +08:00
    16 个背包,每 2 个给个系数,按背包问题算最后得到的最大总数?
    chengrui0428
        4
    chengrui0428  
       2023-07-04 09:22:32 +08:00   ❤️ 5
    littleBink
        5
    littleBink  
       2023-07-04 10:11:41 +08:00
    @chengrui0428 这是真 nb
    yxd19
        6
    yxd19  
       2023-07-04 10:16:25 +08:00
    如果任何货物能放到任何货架上,那不就按重量从高到低,尽量往下放就行了吗
    Georgedoe
        7
    Georgedoe  
       2023-07-04 10:51:48 +08:00
    约束满足问题
    dode
        8
    dode  
       2023-07-04 10:56:50 +08:00
    插入排序
    dode
        9
    dode  
       2023-07-04 11:15:37 +08:00
    ......
    7 ,8
    5 ,6
    3 ,4
    1 ,2
    leegradyllljjjj
        10
    leegradyllljjjj  
    OP
       2023-07-04 11:25:19 +08:00
    @yxd19 重点是还得移动,包括移动的顺序
    leegradyllljjjj
        11
    leegradyllljjjj  
    OP
       2023-07-04 11:28:59 +08:00
    @chengrui0428 跑了一下 好像是有问题啊
    chengrui0428
        12
    chengrui0428  
       2023-07-04 13:46:51 +08:00
    insanny
        13
    insanny  
       2023-07-04 14:02:34 +08:00   ❤️ 1
    @chengrui0428 我觉得楼主描述的应该是:每个货物不能搬出来,要像推箱子一样只能往相邻的格子挪,在这种前提下不断的挪动货物调整位置,从而能得到的最优解,并且这个过程中每一步货物的移动路径也必须记录下来。和你的解题似乎有一些偏差
    leegradyllljjjj
        14
    leegradyllljjjj  
    OP
       2023-07-04 19:41:47 +08:00
    @insanny 搬箱子的话可以搬,可以不相邻,就是可以把箱子搬到任意一个空位上,但是不能一个箱子搬到一个已经有箱子的货位上,目的是生成一个搬运的顺序,搬运次数最少而且重心降到最低
    leegradyllljjjj
        15
    leegradyllljjjj  
    OP
       2023-07-04 19:52:01 +08:00
    做不出来楼主就要被开除了[流泪]
    yesterdaysun
        16
    yesterdaysun  
       2023-07-05 14:53:25 +08:00
    感觉抽象一下问题, 把货架从下而上, 从左到右编号, 抽象为数组, 里面的值就是货物重量, 空的就是 0, 比如随便写一个:
    2,0,0,0,0,1,0,3,4,5
    目标重心最低, 这个其实很简单就是越重的越下面就行, 所以结果就是排个序:
    5,4,3,2,1,0,0,0,0,0

    但是这里的难点是普通的排序算法不行, 不能像普通排序一样通过额外 temp 变量去交换(swap), 要利用现有的空位交换, 也就是只能和某个 0 交换, 而且进一步的优化是如果是同一层的货物要忽略排序, 比如最下一层原来是 4,5, 没有必要硬是调换成 5,4, 因为是同一层, 重心不会发生变化

    是这个意思吗?

    感觉上应该是有最优算法的, 但是我想不出来, 我能想到的就是类比冒泡, 结合贪心策略, 从最下面开始按照排序好的结果一点点去交换得到最终结果
    chenlins
        17
    chenlins  
       2023-07-06 15:30:51 +08:00 via iPhone
    @yesterdaysun 这思路不错,可以研究下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1010 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:26 · PVG 04:26 · LAX 12:26 · JFK 15:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.