技术领域
[0001] 本文的公开内容涉及优化设备、优化方法和优化程序。
相关背景技术
[0002] 多背包问题是组合优化中的问题。在多背包问题中,将各自具有给定重量和给定值的多个项目打包到各自具有重量容量限制的多个背包中,使得总重量小于或等于该限制。通过寻找使分配给多个背包的项目的值的总和最大化的背包和项目的组合来获得多背包问题的解。
[0003] 在组合优化问题中,搜索空间维数的增加导致变量的组合的数目的爆炸性增加。在这种情况下,使用计算所有可能的组合的穷举搜索需要很长的计算时间,这实际上是不可行的。因此,代替寻找真正的最优解,可以使用基于启发式方法的通用近似算法(即,元启发式算法),或者可以使用在实际可行的计算时间内获得良好的近似解的近似算法。
[0004] 如果给定足够长的计算时间,则元启发式算法可以通过从初始状态开始的状态转换以搜索连续获得目标函数的较小值的解来获得最优解或足够接近最优解的解。然而,在实际可行的计算时间内,并不总是容易获得足够接近最优解的解。
[0005] 贪婪算法是可以在可行的计算时间内获得良好的近似解的近似算法之一。在贪婪算法中,例如,将通过将值除以重量而获得的评估值给予每个项目,并且将项目按评估值的降序打包到背包中。利用这种布置,可以高速获得背包和项目的所有组合中的获得相对较大的评估值的总和的组合。然而,该解的精度低于元启发式算法的情况。
[0006] 为了在可行的计算时间内获得足够接近最优解的解,可以想到首先使用贪婪算法来固定一些项目的分配,并且然后针对剩余项目应用元启发式算法。在这种情况下,贪婪算法可以在使用元启发式算法之前的预处理阶段充分减小组合优化问题的大小,这可以使得能够在可行的计算时间内获得高质量的解。
[0007] 在这样做时,即使在通过贪婪算法固定了一些项目的分配之后,仍然应当获得接近最优解的高质量解。考虑到这一点,需要在所有对中仅固定合适的对,每个对包括背包和分配给其的项目。
[0008] 因此,在多背包问题中使用元启发式算法之前,当使用贪婪算法来固定项目的分配时,会期望选择适合于固定分配的项目。
[0009] [相关技术文献]
[0010] [专利文献]
[0011] [专利文献1]日本公开特许公报第2019‑046031号。
[0012] [专利文献2]日本公开特许公报第2011‑100303号。
具体实施方式
[0027] 在下面,将参照附图描述本发明的实施方式。
[0028] 图1是示出多背包问题的图。在多背包问题中,提供了各自具有重量和值的多个项目以及各自具有最大重量容量限制的多个背包。在图1所示的示例中,例如,项目#1的值为5(例如5美元),并且重量为5(例如5kg)。例如,背包#1的最大重量容量限制为13(例如13kg),这限定了打包在其中的项目的重量的最大限制。
[0029] 在图1所示的多背包问题中,从项目#1至#9中选择的尽可能多的项目被打包到背包#1至#3中,而不超过背包#1至#3中的每一个的最大重量容量限制。使打包到多个背包#1至#3中的项目的值的总和最大化的背包和项目的组合是多背包问题的最优解。可以设置问题使得可以在最优解的情况下将所有给定的项目打包到多个背包中。然而,如图1所示,可以不同地设置问题使得项目#1至#9的重量总和(即42)超过背包#1至#3的最大重量容量限制的总和(即39)。在这种情况下,不是所有项目#1至#9都在最优解下被打包到背包#1至#3中,并且一些项目留下而没有被打包。
[0030] 在贪婪算法中,例如,将通过将值除以重量而获得的评估值给予每个项目,并且将项目按评估值的降序打包到背包中。在这样做时,例如,可以按评估值的降序将尽可能多的项目打包到已经按预定顺序(例如,按序列号的升序)从多个背包#1至#3中选择的单个背包中。当该背包变满时,可以根据预定顺序选择下一个背包,然后以相同的方式打包项目。
[0031] 按评估值的降序来打包项目的布置使得每单位重量具有较高值的项目能够被优先打包,其中每个评估值通过将值除以重量而获得。利用这种布置,针对重量限制具有较高性价比的更优选的项目可以被优先打包,使得可以获得相对良好的解。
[0032] 图2是示出评估值的示例的图。图2所示的项目列表10中包含的项目#1至#9与图1所示的项目#1至#9相同。图2所示的评估值是通过将值(即,价值)除以重量而获得的。评估值不限于该示例,并且例如可以可选地是通过将值的平方除以重量而获得的值。仍然可替选地,例如评估值可以是通过从值中减去重量而获得的值。
[0033] 图3是示出使用贪婪算法将图2所示的项目打包到图1所示的背包中的结果的图。图2所示的项目#1至#9按评估值的降序被布置成如下:项目#9、项目#3、项目#1、项目#4、项目#2、项目#5、项目#8、项目#7以及项目#6。
[0034] 要打包的第一个背包#1可以包含重量达13(kg)的项目。当按评估值的降序选择项目时,前四个项目#9、#3、#1和#4的总重量为12(kg),因此这四个项目被打包在背包#1中。类似地,要打包的第二个背包#2可以包含重量达15(kg)的项目,并且因此打包有按评估值的降序的第五个项目和第六个项目即项目#2和项目#5(总重量为10kg)。要打包的第三个背包#3可以包含重量达11(kg)的项目,并且因此打包有按评估值的降序的第七个项目即项目#8(重量为10kg)。根据上述贪婪算法,按评估值的降序的第八个项目和第九个项目即项目#7和项目#6不能被打包到背包中。
[0035] 图4是示出最优解的示例的图。在图4所示的解下,以与图3所示的贪婪算法的情况相同的方式将项目#9、项目#3、项目#1和项目#4打包到背包#1中。打包到背包#2和背包#3的项目在通过贪婪算法获得的解与最优解之间不同。在图4所示的最优解的情况下,背包#2(具有最大重量限制为15kg)打包有项目#2和项目#8(具有总重量为15kg),并且背包#3(具有最大重量限制为11kg)打包有项目#5和项目#7(具有总重量为11kg)。最优解不限于该示例的解。例如,通过调换图3中的两个项目#5和#4获得的布置仍然是最优解,并且此外,通过调换图3中的项目#9和#3的集合和项目#5获得的布置仍然是最优解。
[0036] 从上述示例中可以理解,通过使用贪婪算法来打包项目产生质量低于最优解的质量的解。考虑到这一点,下面将描述的优化设备和优化方法使用贪婪算法来打包一些项目,并且然后使用元启发式算法来确定剩余项目的分配。在利用贪婪算法减小问题大小之后使用元启发式算法允许在可行的计算时间内获得高质量的解。
[0037] 然而,当贪婪算法固定项目的分配时,项目中的哪一个被固定地分配将影响通过元启发式算法获得的最终解的质量。在图3所示的示例中,例如,将项目#8固定地分配给背包#3导致决不能获得图4的最优解。另一方面,在图3所示的项目中,固定地分配项目#9、项目#3、项目#1、项目#4和项目#2,仍然允许获得图4的最优解。
[0038] 考虑到上述,优选的是避免固定从如图3所示的贪婪算法已经为其确定分配的项目中选择的项目的分配,并且这些项目很可能在最优解的布置与通过贪婪算法获得的布置之间具有不同的分配。相反地说,针对在最优解的布置与通过贪婪算法获得的布置之间具有不同分配的可能性低的项目,分配可以是固定的。
[0039] 图5至图8是示出根据优化方法的实施方式的固定项目的分配的处理的示例的图。该优化方法将多个项目分配给多个分配位置(例如,背包),每个项目具有关于第一属性(例如,重量)的第一属性值(例如,重量值)以及关于第二属性(例如,价值)的第二属性值(例如,“价值”值),每个分配位置具有关于第一属性的最大限制。在这样做时,执行分配使得第一属性值的总和小于或等于最大限制。优化方法的目标是使已经分配给分配位置的项目的第二属性值的总和尽可能大。
[0040] 该优化方法首先基于每个项目的重量值和价值值来计算评估值。图2所示的项目列表10包含针对项目#1至#9计算出的评估值。如先前提到的,包含在项目列表10中的项目#1至#9按评估值的降序被布置成如下:项目#9、项目#3、项目#1、项目#4、项目#2、项目#5、项目#8、项目#7和项目#6。
[0041] 该优化方法按评估值的降序将尽可能多的未分配项目依次分配给已经按预定顺序从多个分配位置(例如,背包#1至#3)中选择的单个分配位置,使得重量的总和小于或等于最大限制。图5示出了其中四个项目即项目#9、项目#3、项目#1和项目#4(其总重量为12kg)按评估值的降序被打包到待打包的第一个背包#1(具有最大限制为13kg)中的状态。
在项目列表10中,已经打包的项目#9、项目#3、项目#1和项目#4使用勾号来标记以指示这些项目已经被打包。
[0042] 随后,根据基于重量值和价值值中的至少一个的选择规则,从分配给单个选择的背包#1的项目中选择一个或更多个项目。然后,创建具有与一个或更多个选择的项目中的对应一个项目相同的评估值、相同的重量值以及相同的价值值的副本,然后将一个或更多个创建的副本添加至该项目列表10中的未分配项目。
[0043] 图6示出了其中针对项目#4创建副本的状态。尝试将项目#2打包到已经打包有项目#9、项目#3、项目#1和项目#4的背包#1中导致打包项目#2失败,这是因为项目#2的重量为6(kg)。这个事实由删除图6中的项目#2的删除线指示。也就是说,按评估值的降序将尽可能多的未分配项目分配至背包#1中的结果是其中项目#9、项目#3、项目#1和项目#4(其总重量为12kg)被打包的状态。在这种状态下,在图6所示的示例中选择具有最小评估值(=价值/重量)的项目#4,并且然后,创建具有与所选择的项目#4相同的评估值、相同的重量值以及相同的价值值的副本,然后将所创建的项目#4的副本11添加至项目列表10。
[0044] 此后,上述分配步骤和副本添加步骤根据需要重复多次,直到将包括副本的项目分配给所有分配位置的处理结束为止。图7示出了其中分配项目的处理已经结束的状态。与作为第一个分配位置的背包#1类似,作为下一个分配位置的背包#2被打包有按评估值的降序依次馈送的尽可能多的未分配项目,然后选择这些分配的项目中的具有最小评估值的项目#5。针对所选择的项目#5创建副本12。然后,将项目#5的这个创建的副本12添加至项目列表10。通过先前提到的分配步骤,最初在项目列表10中被列为未分配项目的创建的副本11和12被分别打包到背包#2和背包#3中。
[0045] 背包#3也打包有按评估值的降序依次馈送的尽可能多的未分配项目,然后选择这些分配的项目中的具有最小评估值的项目#7。针对所选择的项目#7创建副本13。然后,将项目#7的这个创建的副本13添加至项目列表10。
[0046] 在优化方法中,在分配步骤结束之后,从分配位置(即背包#1至#3)删除副本和用作副本创建的基础的项目。然后,到分配位置(即背包#1至#3)的分配针对留下而未被删除的项目是固定的。图8示出了其中项目分配是固定的状态。
[0047] 如图8所示,其中项目#9、项目#3和项目#1打包到背包#1中的状态是固定的(即最终确定),并且其中项目#2打包到背包#2的状态是固定的(即最终确定)。也就是说,在分配处理完成时获得的图7所示的状态下,删除了用作副本创建的基础的项目#4、项目#5和项目#7,并且删除了项目#4和项目#5的副本。作为这些删除的结果,仅项目#9、项目#3、项目#1和项目#2作为已经固定地分配给分配位置的项目留在背包中。
[0048] 然后,优化方法使用元启发式算法以将到分配位置的分配尚未固定的项目即项目列表10中未被标记为已经分配的项目分配给分配位置(即背包#1至#3)。更具体地,通过启发式算法将项目#4、项目#5、项目#6、项目#7和项目#8分配给背包#1至#3中的可用空间。也就是说,通过启发式算法将项目#4、项目#5、项目#6、项目#7和项目#8分配给三个背包,即被认为具有最大重量容量限制分别为5kg、10kg和11kg的背包#1至#3。
[0049] 元启发式算法的示例包括随机游走搜索算法、模拟退火算法、遗传算法、随机进化算法等。这些近似算法被设计成使得将概率元素引入从初始状态即起点执行的状态转变中,以搜索获得目标函数的依次改善值的解,从而使得状态能够收敛于尽可能令人满意的解,而不会陷入不利的局部最小值。在遗传算法的情况下,例如,在其中用作目标函数值的种群的适应度在相继代中增加的过程期间,以概率方式控制对的选择、交叉、选择、突变等,从而避免陷入不利的局部解。在模拟退火算法的情况下,例如,以概率方式控制状态转变,以便即使目标函数的值由于给定的状态转变而恶化时,也允许以一定的概率发生这种状态转变,从而避免陷入不利的局部解。
[0050] 用于执行模拟退火的机制的示例包括使用伊辛能量函数的伊辛机(即,玻尔兹曼机)。在伊辛机中,将要解决的问题转化为表示磁性材料的自旋行为的伊辛模型,并且然后计算该问题的解。
[0051] 背包问题可以如下被表述为伊辛问题。项目的数目被表示为N,背包的数目被表示为M,项目#i的价值被表示为ci,项目#i的重量被表示为wi,以及背包#j的最大重量容量限制被表示为Wj。此外,变量xij指示项目#i是否包含在背包#j中。变量xij为1指示项目#i包含在背包#j中,而变量xij为0指示项目#i不包含在背包#j中,可以注意到,背包问题在本文中是通过使用其中变量假设为+1或0的QUBO(二次无约束二进制优化)形式而不是使用其中变量假设为+1或‑1的伊辛模型来表述的。
[0052] 目标函数可以由如下表达式(1)来限定:
[0053]
[0054] 此外,如下的表达式(2)和表达式(3)可以用作约束:
[0055]
[0056]
[0057] 约束表达式(2)指示打包到每个背包的项目的总重量小于或等于背包的最大重量容量限制。约束表达式(3)指示没有项目被选择两次或更多次。
[0058] 为了使模拟退火算法搜索解,在其中满足约束条件(2)和(3)的条件下,xij经受概率转变以找到使由表达式(1)限定的目标函数最小化的xij。可以注意到,约束表达式(2)和(3)可以结合至目标函数中。在这样做时,可以引入辅助变量,以便允许使目标函数最小化的动作产生满足约束表达式的解。具体地,要求值Z(例如Σwixij)小于或等于K的条件可以被重写为要求使下面所示的具有辅助变量yk的表达式(4)最小化的条件:
[0059] (1‑Σyk)2+(Σkyk‑Z)2 (4)。
[0060] 符号“∑”意指获得从k=1至k=K的总和。表达式(4)中的第一项要求y1至yK中仅一个被设置为1。第二项要求将Z的值设置为等于辅助变量即y1至yK之一的下标的值,并且即设置为1。当Z的值等于从1至K的自然数之一时,表达式(4)的值能够变为零。当Z的值大于K时,表达式(4)的值不能够变为零。在满足要求Z≤K的约束条件的同时使原始目标函数最小化的优化过程可以被表述为使通过将表达式(4)添加至原始目标函数而获得的新目标函数最小化的过程。具体地,可以通过使用约束表达式(2)和约束表达式(3)中的每一个作为以上说明的Z的值来获得两个表达式,并且可以将其添加至表达式(1)中。这种布置允许由约束表达式(2)和(3)限定的约束条件被结合至需要被最小化的目标函数中。
[0061] 在模拟退火算法中,可以如下限定状态S:
[0062] S=(x11,x12,…,x1N,x21,x22,…,x2N,…,xM1,xM2,…,xMN)。
[0063] 计算当前状态S的目标函数值E,并且然后,计算通过从当前状态S进行微小变化(例如,1位反转)而获得的下一状态S'的目标函数值E',然后计算这两个状态之间的差ΔE(=E'‑E)。例如,在其中使用玻尔兹曼分布来表示S的概率分布以及使用Metropolis方法的情况下,可以通过以下公式来限定发生向下一状态S'的转变的概率P。
[0064] P=min[1,exp(‑βΔE)] (5)
[0065] 此处,β是热力学β(即,绝对温度的倒数)。函数min[1,x]假定值为1或值为x,以较小者为准。根据以上公式,在ΔE≦0的情况下,以概率“1”发生向下一状态的转变,并且在0<ΔE的情况下,以概率exp(‑βΔE)发生向下一状态的转变。
[0066] 在执行状态转变的同时以足够慢的速率降低温度,理论上可以使状态收敛于具有最小目标函数值的最优解。Metropolis方法是非限制性示例,并且可以可替选地使用其他转变控制算法,例如吉布斯采样。
[0067] 例如,在本公开内容的优化方法中,分配位置(例如,背包)中的分配状态针对已经通过结合图8描述的贪婪算法固定了分配的项目是固定的。然后使用元启发式算法将分配尚未固定的项目(即项目#4、项目#5、项目#6、项目#7和项目#8)打包到背包#1至#3中,使得实现最优分配。也就是说,搜索项目和背包的组合使得已经分配的项目的总价值变得尽可能大,同时满足关于最大重量容量限制的约束条件。
[0068] 如上所述,根据实施方式的优化方法创建一些项目的副本,并且在贪婪算法的执行期间将包括副本的项目分配给分配位置,为其创建副本的项目是从分配给已经完成分配的单个分配位置的项目中选择的一个或更多个项目,并且根据基于重量值和价值值中的至少一个的选择规则来选择这些项目。在上述示例中,选择具有最低评估值的一个项目。可替选地,可以选择具有最低评估值的两个或更多个项目。
[0069] 在图7所示的状态下,项目#4在打包到背包#1中的项目#9、项目#3、项目#1和项目#4中具有最低评估值,并且该项目#4将在最优解中存储在背包#1中的概率被认为不是很高。
例如,项目#5具有相对较低的价值,但是可以充分利用背包#1的最大重量限制,可以代替项目#4被打包到背包#1中。这种布置可以提供更接近最优解的解。在这种情况下,项目#4可以被打包到下一个背包#2中,而不是背包#1中。在该实施方式的优化方法中,像背包#1中的项目#4一样的项目可能具有低确定度,在该意义上难以确定是将该项目打包到背包#1中还是打包到下一个背包#2中,并且因此,从其分配固定的项目中排除这样的项目。
[0070] 此外,针对具有低确定度的项目创建副本,然后通过贪婪算法将原始项目和副本两者都当作要打包到背包中的项目。在贪婪算法完成分配之后,然后从背包中移除原始项目和副本两者。该布置允许针对元启发式算法节省足够的空间(即,可用的重量容量),该空间可用于具有低确定度的项目的后续分配。也就是说,在执行元启发式算法期间选择分配位置的自由度增加,从而增加了实现接近最优解的解的概率。
[0071] 实施方式的描述已经针对其中创建一个或更多个副本的情况。可替选地,贪婪算法可以分配项目,以便在原始分配的背包和下一个背包两者中确保用于分配低确定度的项目的空间(即,重量容量)。例如,在图5所示的状态下,项目#4可以从背包#1移动至背包#2,并且此后,剩余的项目可以被分配给背包#2以及一个或更多个后续背包。可替选地,在图5所示的状态下,通过将背包#2的最大重量容量限制暂时设置为11kg(=15kg‑4kg),可以从背包#2的总空间中移除用于重量为4kg的项目#4的空间,并且此后,可以分配剩余的项目。如上所述,通过适当的数据操作,可以以各种不同的方式实现等同于根据贪婪算法显式创建副本和打包副本的过程的过程。在本申请中,诸如“创建副本并且分配副本”的短语旨在涉及基于保证副本空间的原则实现相同预期效果的所有数据操作。
[0072] 在以上提到的示例中,具有最低评估值的项目被选择为具有低确定度的项目。可替选地,根据情况,可以基于其他选择规则来选择具有低确定度的项目。例如,已经完成项目分配的背包可以包含具有最低评估值的一个或更多个项目,并且还包含具有与最低评估值相差不大的评估值的其他项目。在这种情况下,评估值可以不被用作选择标准,而相反,具有最轻重量的一个或更多个项目可以被选择为具有低确定度的项目。这是因为与具有重重量的项目相比,具有轻重量的项目在将项目打包到背包中方面提供了灵活性(即,较大自由度)。在一些情况下,认为这种灵活的项目最好保持在不固定的状态,而不是被固定分配。选择具有最轻重量的一个或更多个项目作为具有低确定度的项目可以增加由元启发式算法获得的解比其他方式更接近最优解的概率。
[0073] 此外,当选择一个或更多个项目时,可以针对每个背包设置重量阈值。然后,在超过背包的阈值的情况下打包到背包中的一个或更多个项目可以被选择为具有低确定度的项目。这种布置使得可以选择在数目上对应于每个背包的重量阈值的项目,而不是选择预定的特定数目的项目。例如,背包#1可能具有阈值为9kg。在如图6所示的项目被分配的状态下,在超过9kg的情况下已经被打包到背包中的项目#4可以被选择为具有低确定度的项目。将适当的值设置为阈值重量使得经受元启发式算法的项目的数目能够被调整至适当的数目,从而将组合优化问题的大小限制至适当的大小。例如,阈值重量可以被设置为通过将所有项目的总重量除以背包的数目而获得的值。
[0074] 当选择预定数目的X个项目作为具有低确定度的项目时,可以基于过去的数据或测试数据来确定或学习数目X,以便利于找到最优解。可替选地,连续改变X,然后执行元启发式算法以获得针对其中使用相应的不同数目X的多个情况的解。然后可以将所获得的解之中的最佳解呈现给用户。这些布置允许获得比其它方式更接近最优解的解。
[0075] 图9是示出诸如用于执行优化方法的优化设备的信息处理设备的配置的示例的图。图1所示的优化设备包括CPU 21、显示单元22、输入单元23、ROM 24、RAM 25、HDD 26、网络接口27、可移动存储介质驱动器28和元启发式计算单元29。CPU 21和元启发式计算单元29是算术电路。
[0076] 输入单元23提供用户接口,并且接收用于操作优化设备的各种指令以及响应于数据请求等的用户响应。显示单元22显示由优化设备进行处理的结果,并且还显示使得用户能够与优化设备进行通信的各种数据。网络接口27用于与外围装置以及与远程位置进行通信。
[0077] 图9所示的优化设备是计算机,并且该优化方法被提供为可由该优化设备执行的计算机程序。该计算机程序被存储在可安装至可移动存储介质驱动器28的存储介质M中。该计算机程序通过可移动存储介质驱动器28从存储介质M加载至RAM 25或加载至HDD 26。可替选地,计算机程序可以存储在外围设备中或在远程位置处提供的存储介质(未示出)中,并且通过网络接口27从存储介质加载至RAM 25或加载至HDD 26。
[0078] 当从输入单元23接收到用于程序执行的用户指令时,CPU 21将程序从存储介质M、外围设备、远程存储介质或HDD 26加载至RAM 25。CPU21通过使用RAM 25的可用存储空间作为工作区域来执行加载至RAM 25的程序,并且在出现这种需要时在与用户通信的同时继续处理。ROM 24存储用于控制CPU 48等的基本操作的目的的控制程序。
[0079] 通过执行如上所述的计算机程序,优化设备执行基于贪婪算法的分配处理。元启发式计算单元29可以是被专门设计成执行元启发式算法的专用硬件,并且可以是执行模拟退火以搜索伊辛问题的解的专用硬件。在替选配置中,可以不提供元启发式计算单元29。在这种情况下,作为通用计算机的处理器的CPU 21用作元启发式计算单元来执行元启发式算法。
[0080] 图10是示出优化设备的功能配置的示例的图。图10所示的优化设备包括数据存储单元30、数据获取单元31、评估值计算单元32、分配单元33、副本选择单元34、副本创建单元35、分配最终确定单元36、元启发式计算单元37以及数据输出单元38。数据存储单元30已经在其中存储了项目数据库(即,项目DB)30A和背包数据库(即,背包DB)30B。除了数据存储单元30和元启发式计算单元37之外的功能单元可以由图9所示的CPU 21来实现。数据存储单元30的功能可以由图9所示的RAM 25或HDD 26来实现。元启发式计算单元37的功能可以由图9所示的CPU 21或元启发式计算单元29来实现。
[0081] 可以注意到,被示出为框的功能块之间的边界指示功能边界,并且可能不一定对应于程序模块之间的边界或者在控制逻辑方面的分离。一个功能块和另一功能块可以被组合成用作一个块的一个功能块。一个功能块可以被划分成协同操作的多个功能块。
[0082] 数据获取单元31在项目数据库30A和背包数据库30B中存储从外部源供应的项目数据和背包数据以限定多背包问题。评估值计算单元32基于第一属性值(例如,重量值)和第二属性值(例如,价值值)来计算每个项目的评估值。
[0083] 分配单元33按评估值的降序将尽可能多的未分配项目依次分配给已经按预定顺序从多个分配位置(例如,背包)中选择的单个分配位置,使得第一属性值的总和小于或等于最大限制。副本选择单元34可以根据基于第一属性值(例如,重量值)和第二属性值(例如,价值值)中的至少一个的预定选择规则,从分配给单个选择的分配位置(例如,背包)的项目中选择一个或更多个项目。副本创建单元35创建具有与一个或更多个选择的项目中的相应一个项目相同的评估值、相同的第一属性值(例如,重量值)以及相同的第二属性值(例如,价值值)的副本,然后将一个或更多个创建的副本添加至项目数据库30A(例如,先前描述的项目列表10)中的未分配项目。
[0084] 在包括副本的项目的分配结束之后,分配最终确定单元36从分配位置(例如,背包)删除副本和用作副本创建的基础的项目,从而针对留下而未被删除的项目固定到分配位置的分配。
[0085] 元启发式计算单元37使用元启发式算法以将在问题中限定的多个项目中的到分配位置的分配尚未固定的项目分配给分配位置(例如,背包)。在这样做时,要分配的项目不包括副本。并不总是所有的多个项目都可以被分配给分配位置(背包)的情况。数据输出单元38输出由元启发式计算单元37获得的解(即,指示最终获得的项目和分配位置的组合的数据)。输出数据可以经由显示单元22供应给显示屏,经由可移动存储介质驱动器28供应给HDD 26、存储介质M,或者经由网络接口27供应给外部装置。
[0086] 图11是示出根据第一实施方式的优化方法的过程的流程图。可以注意到,在图11和随后的流程图中,执行流程图所示的步骤的顺序仅是示例。所公开技术的范围不限于所公开的顺序。例如,描述可以说明在执行B步骤之前执行A步骤。尽管有这种描述,但是在物理上和逻辑上可以在执行A步骤之前执行B步骤,也可以在执行B步骤之前执行A步骤。在这种情况下,无论首先执行哪个步骤,影响流程图的结果的所有后果都可能是相同的。然后接下来,出于所公开的技术的目的,明显可以在执行A步骤之前执行B步骤。尽管说明了在执行B步骤之前执行A步骤,但是这种描述不旨在将如上所述的明显情况置于所公开的技术的范围之外。这种明显的情况不可避免地落入本公开内容所预期的技术的范围内。
[0087] 在步骤S1中,输入单元23接收输入数据。输入数据是关于项目的信息和关于背包的信息。
[0088] 在步骤S2中,CPU 21根据关于多个背包的信息制作列表,以将该列表存储在堆栈“knapsackList(背包列表)”中,并且计算项目中的每一个项目的评估值,以将按评估值的降序布置的项目存储在项目列表“itemList(项目列表)”中。在堆栈“knapsackList”中,背包按预定顺序(例如,按序列号的升序)布置。
[0089] 在步骤S3中,CPU 21检查堆栈“knapsackList”是否为空。如果堆栈不为空,则过程进行至步骤S4。
[0090] 在步骤S4中,CPU 21从堆栈“knapsackList”中移除顶部项目,并且将移除的背包分配为分配位置“knapsack(背包)”。在步骤S5中,CPU21检查项目列表“itemList”是否为空。如果项目列表不为空,则过程进行至步骤S6。
[0091] 在步骤S6中,CPU 21将项目列表“itemList”中的顶部项目分配为分配项目“item(项目)”。也就是说,将其中按评估值的降序布置的多个项目的列表中的顶部项目分配为分配项目“item”。
[0092] 在步骤S7中,CPU 21检查将分配项目“item”分配给分配位置“knapsack”是否导致违反重量限制(即,最大重量容量限制)。如果没有发生违反,则过程进行至步骤S8。
[0093] 在步骤S8中,CPU 21将分配项目“item”分派(即,分配)给分配位置“knapsack”。也就是说,将由分配项目“item”标识的项目打包到由分配位置“knapsack”标识的背包中。
[0094] 在步骤S9中,CPU 21从项目列表“itemList”中移除(即,删除)已经在步骤S8中分配的项目。此后,过程返回至步骤S5,从步骤S5开始重复后续步骤。
[0095] 如果步骤S7中的检查发现违反了重量限制,则在步骤S10中,CPU 21创建已经分配给分配位置“knapsack”的项目中的具有低确定度的一个或更多个项目的副本,然后将一个或更多个创建的副本添加至项目列表“itemList”。在步骤S11中,CPU 21根据需要计算项目列表“itemList”中的项目(包括副本)的评估值,然后在项目列表“itemList”中按评估值的降序布置包括副本的项目。此后,过程返回至步骤S3,从步骤S3开始重复后续步骤。
[0096] 如果步骤S3中的检查发现堆栈“knapsackList”为空,则在步骤S12中,CPU 21从已经完成分配的背包中移除所有副本,并且将用作副本的基础的所有项目返回至项目列表“itemList”。保留在背包中的项目是固定分配(即固定)的项目。
[0097] 在步骤S13中,元启发式计算单元29(即,伊辛机)针对项目列表“itemList”中的项目执行模拟退火。可替选地,CPU 21可以针对项目列表“itemList”中的项目执行模拟退火。
[0098] 在步骤S14中,CPU 21经由指定的介质(例如,显示屏或存储介质)向用户呈现通过模拟退火获得的解。至此,优化方法的执行结束。
[0099] 图12是示出根据第二实施方式的优化方法的过程的流程图。
[0100] 在步骤S21中,输入单元23接收输入数据。输入数据是关于项目的信息和关于背包的信息。
[0101] 在步骤S22中,CPU 21将阈值“threshold”设置为其初始值“0”。后续步骤S23至步骤S30分别与图11所示的步骤S2至步骤S9相同。然而,可以注意到,在图12所示的流程图中,如果步骤S28中的检查发现违反了重量限制,则过程从步骤S28进行至步骤S31。
[0102] 在步骤S31中,CPU 21针对分配给分配位置“knapsack”的项目中的最后分配的数目“threshold”个的项目(即数目“threshold”个具有最低评估值的项目)创建副本,然后将创建的副本添加至项目列表“itemList”。步骤S32至S34分别与图11所示的步骤S11至S13相同。
[0103] 在步骤S34中执行模拟退火之后,在步骤S35中,CPU 21将阈值“threshold”增加1。在步骤S36中,CPU 21检查阈值“threshold”是否大于预先设置的预定数目N。在阈值“threshold”不大于预定数目N的情况下,过程返回至步骤S23以重复后续步骤的执行。
[0104] 如果步骤S36中的检查发现阈值“threshold”大于预定数目N,则CPU21经由指定的介质(例如,显示屏或存储介质)向用户呈现通过模拟退火获得的解之中的最佳解。至此,优化方法的执行结束。
[0105] 在上述优化方法的第二实施方式中,预先设置预定数目N,并且当阈值“threshold”不大于N时,执行通过贪婪算法的分配处理和通过元启发式算法的解搜索。当阈值“threshold”变得大于N时,该过程结束以呈现最佳解。代替利用这样的预定数目N,可以利用不同的检查标准来结束通过贪婪算法的分配处理和通过元启发式算法的解搜索。例如,步骤S36中的检查可以检查在通过贪婪算法完成分配处理时包含一个或更多个固定项目的背包的数目是否小于或等于1。当发现该数目小于或等于1时,该过程可以结束以呈现最佳解。在该布置中,继续执行通过元启发式算法的解搜索,直到通过贪婪算法分配的固定项目的数目变得接近最小可能数目为止。因此,增加了获得最优解的概率。此外,在不预先设置预定数目N的情况下,根据问题的大小和方面自动设置在其条件下过程结束的条件。因此,可以根据问题的大小和方面以自适应的方式获得接近最优解的解。
[0106] 图13是示出背包问题的变型的图。被视为组合优化问题的多背包问题可能出现在不同于包括项目和背包的问题设置的问题设置下。图13所示的示例针对其中任务被分配给多个工人的问题。
[0107] 在该示例中,限定了多个对象(即任务),每个对象具有关于第一属性(即任务量)的第一属性值(即任务所需的时间)和关于第二属性(即任务的价值)的第二属性值(即任务的报酬)。在图13所示的示例中,例如,包含在任务列表40中的任务#1需要45分钟来完成,并且完成该任务产生1075日元的价值(例如,可以通过报酬1075日元来奖励)。
[0108] 此外,将任务分配给分配位置(即,工人),每个分配位置具有关于第一属性的最大限制(即,最大工作时间限制),使得第一属性值的总和(即,针对任务所需要的时间的总和)小于或等于最大限制(即,最大工作时间限制)。在图13所示的示例中,例如,包含在工人列表41中的工人#1具有300分钟的最大工作时间限制。因此,任务#9(针对其需要时间为177分钟)和任务#5(针对其需要时间为123分钟)两者都可以被分配给工人#1。
[0109] 在这个问题中,需要找到工人和任务的组合,该组合使得与已经分配给分配位置(即,工人)的对象(即,任务)相关联的第二属性值(即,任务的报酬)的总和尽可能大。在寻找问题的解时,贪婪算法可以采用通过将任务列表40中所示的报酬除以任务所需的时间而获得的评估值。
[0110] 如上所述,在与包括项目和背包的问题设置不同的问题设置下,存在等同于多背包问题的组合优化问题。本公开内容的优化设备和优化方法适用于等同于多背包问题的这种组合优化问题。
[0111] 此外,尽管已经参照实施方式描述了本发明,但是本发明不限于这些实施方式,并且可以在不脱离权利要求所限定的范围的情况下进行各种变型和修改。
[0112] 根据至少一个实施方式,当在多背包问题中使用元启发式算法之前使用贪婪算法来固定项目的分配时,可以选择适合于固定分配的项目。