[0072] (约束条件F)在所有路径上,卡车在同一路径上通过车厂两次。
[0073] (约束条件G)对于所有路径,卡车在开始时间和结束时间处不通过除车厂外的点。
[0074] 根据第一实施方式的优化装置10使用例如如图1所示的状态变量。其中描述“1”的单元指示具有值1的状态变量,以及其中未描述值的单元指示具有值0的状态变量。图1示出了在计算具有4辆卡车和13个节点的CVRP的情况下的状态变量的示例。尽管可以提供多个车厂,但在下文中假设存在单个车厂。
[0075] 在横轴上,1至13表示节点编号,以及D0至D4表示车厂。纵轴表示时间t。尽管存在如上所述的单个车厂,但是使用D0至D4以便允许四个卡车的从车厂的出发时间和到车厂的返回时间彼此区分。例如,第一辆卡车离开的车厂由D0表示,第一辆卡车返回的车厂以及第二辆卡车离开的车厂由D1指示,并且第二辆卡车返回的车厂以及第三辆卡车离开的车厂由D2指示。第三辆卡车返回的车厂以及第四辆卡车离开的车厂由D3指示,并且第四辆卡车返回的车厂由D4指示。
[0076] 因此,状态变量的数量为18×18是足够的。然而,当假设第一辆卡车在时间t=0处离开车厂并且第四辆卡车在最后的时间t=17处返回车厂时,不必提供行t=0、17和列“D0、D4”的状态变量。因此,指示四辆卡车中的任何卡车在时间t处是否出现在13个节点或车厂中的任何一个处的状态变量的数量可以是在图1的边框15内的16×16=256个。
[0077] 例如,包括在评估函数中的状态变量的数量可以是(除车厂外的节点的数量+卡车的数量‑1)的平方。
[0078] 为了满足约束条件B、C和F,16×16个状态变量具有其中包括在单行和单列中的状态变量的值之和为1的2向1热约束。
[0079] 因此,列D1至D3中的每一列的状态变量的组是满足1向1热约束的组。边框15内的列D1至D3的每一列中的状态变量的组可以用于计算四辆卡车在每条路径上的运载能力的总和(节点的需求的总值)。
[0080] 在下文中,边框15内的列D1至D3的状态变量的组分别被称为组gD1、gD2和gD3。在边框15内,表示在时间t处在具有节点编号n的节点处是否存在卡车的状态变量(x1至x208)被表示为xt,n。此外,组gD1中的16个状态变量(x209至x224)被表示为yD1,1至yD1,16,组gD2中的16个状态变量(x225至x240)被表示为yD2,1至yD2,16,以及组gD3中的16个状态变量(x241至x256)被表示为yD3,1至yD3,16。
[0081] 为了计算在每条路径上四辆卡车的运载能力之和,由例如搜索单元11基于下面的表达式(5)来转换如上表示的组gD1至gD3的状态变量。
[0082]
[0083] 在表达式(5)中,k=1、2、3,i=1、2、3、……、16。
[0084] 图2示出了转换结果的示例。
[0085] 在图2所示的示例中,yD1,5、yD2,8、yD3,14是1。因此,利用表达式(5),转换后的值如下:zD1,1至zD1,5、zD2,1至zD2,8、zD3,1至zD3,14是1;并且其他为0。
[0086] 在路径(DTOT1至DTOT4)中的每条路径上的四辆卡车的运载能力之和能够通过使用上述转换后的值由例如下面的表达式(6)来计算。
[0087]
[0088] 在表达式(6)中,Dt是在时间t处的需求之和并且由下面的表达式(7)表示。
[0089]
[0090] 在表达式(7)中,Dn是具有节点编号n的节点的需求。车厂处的需求为0。
[0091] 为了实现如上所述的DTOT1至DTOT4的公式,约束条件是:其中组gD1至gD3的状态变量的值变为1的顺序是组“gD1、gD2、gD3”的顺序。例如,期望在第二卡车访问之前的时间处访问多个节点中的任何节点的第一卡车在第二卡车返回之前的时间处返回车厂。此外,期望在第三卡车访问之前的时间处访问多个节点中的任何节点的第二卡车在第三卡车返回之前的时间处返回车厂。当不满足该约束条件时,应用约束条件违反(约束条件违反1)。
[0092] 在下面的示例中,组gD2的状态变量在紧接在组gD1的状态变量变为1的时间之后的时间处变为1的情况以及组gD3的状态变量在紧接在组gD2的状态变量变为1的时间之后的时间处变为1的情况也被设置为约束条件违反(约束条件违反2)。例如,期望第二辆卡车不要在紧接在第一辆卡车返回车厂的时间之后的时间处返回车厂。此外,期望第三辆卡车不要在紧接在第二辆卡车返回车厂的时间之后的时间处返回车厂。
[0093] 此外,组gD1至gD3的状态变量在紧接在卡车第一次离开车厂的时间之后的时间处变为1的情况以及组gD1至gD3的状态变量在卡车最终到达车厂的时间紧之前的时间处变为1的情况也被设置为约束条件违反(约束条件违反3)。约束条件违反2和3意指4辆卡车中的一辆不访问任何节点的情况。然而,约束条件违反不一定根据问题设置来设置。
[0094] 图3示出了满足约束条件和不满足约束条件的情况的示例。
[0095] 在图3中,上述约束条件违反均不被应用于指示为“OK”的示例。约束条件违反1被应用于指示为“NG1”和“NG2”的示例。约束条件违反2被应用于指示为“NG3”的示例,以及约束条件违反3被应用于指示为“NG4”的示例。
[0096] 在将约束项添加到评估函数以抑制如上所述的约束条件违反的情况下,约束项的数量增加,并且存在降低向最优解的收敛性的可能性。
[0097] 在组gD1至gD3中,基于在某个组中具有值1的状态变量的标识号,转换允许范围确定单元12确定在另一组中其值被允许从0变化为1的状态变量的标识号的上限或下限。
[0098] 转换允许范围确定单元12包括存储单元12a。存储单元12a存储用于标识组gD1、gD2、gD3的状态变量的标识号。存储单元12a还存储用于标识在组“gD1、gD2、gD3”中具有值1的状态变量(热位)hD1、hD2、hD3的标识号。存储单元12a例如是电子电路诸如SRAM或寄存器。
[0099] 在图1所示的示例中,作为x209至x224的标识号的209至224被存储作为组gD1的状态变量的标识号。此外,作为x225至x240的标识号的225至240被存储作为组gD2的状态变量的标识号,以及作为x241至x256的标识号的241至256被存储作为组gD3的状态变量的标识号。此外,作为x213的标识号的213被存储作为热位hD1的标识号,作为x232的标识号的232被存储作为热位hD2的标识号,并且作为x254的标识号的254被存储作为热位hD3的标识号。
[0100] 图1示出了由转换允许范围确定单元12执行的处理的示例。
[0101] 为了避免上述约束条件违反3,组gD1中其值被允许从0变为1的状态变量的标识号的下限是通过将1与组gD1的状态变量的第一标识号209相加获得的210。
[0102] 为了避免上述约束条件违反1、2,基于热位hD2的标识号来确定组gD1中其值被允许从0变为1的状态变量的标识号的上限。在如图1所示的示例中包括在组gD1到gD3的每一个组中的状态变量的数量(组大小)是16的情况下,热位hD2的标识号‑16‑2是组gD1中其值被允许从0变为1的状态变量的标识号的上限。当热位hD2的标识号为232时,上限为232‑16‑2=214。
[0103] 为了避免上述约束条件违反1、2,基于热位hD1的标识号来确定组gD2中其值被允许从0变为1的状态变量的标识号的下限。在组大小=16的情况下,热位hD1的标识号+16+2是组gD2中其值被允许从0变为1的状态变量的标识号的下限。当热位hD1的标识号为213时,下限为213+16+2=231。
[0104] 为了避免上述约束条件违反1、2,基于热位hD3的标识号来确定组gD2中其值被允许从0变为1的状态变量的标识号的上限。在组大小=16的情况下,热位hD3的标识号‑16‑2是组gD2中其值被允许从0变为1的状态变量的标识号的上限。当热位hD3的标识号为254时,上限为254‑16‑2=236。
[0105] 为了避免上述约束条件违反1、2,基于热位hD2的标识号来确定组gD3中其值被允许从0变为1的状态变量的标识号的下限。在组大小=16的情况下,热位hD2的标识号+16+2是在D3列中的状态变量组中其值被允许从0变为1的状态变量的标识号的下限。当热位hD2的标识号为232时,下限为232+16+2=250。
[0106] 为了避免上述约束条件违反3,组gD3中其值被允许从0变为1的状态变量的标识号的上限是通过从组gD3的状态变量的最后标识号256中减去1获得的255。
[0107] 转换允许范围确定单元12基于如上所述确定的上限或下限针对组gD1至gD3的状态变量中的每一个输出指示是否允许值从0变为1的信号(指示转换禁止或转换允许的信号)。在图1所示的示例中,指示转换禁止的信号是1,以及指示转换允许的信号是0。
[0108] 例如,关于组gD2,针对其值被允许从0变为1的x231至x236中除了其值已经为1的x232之外的x231至x236输出指示转换允许的信号。对于x232、x225至x230和x237至x240,输出指示转换禁止的信号。
[0109] 对于针对其输出指示转换禁止的信号的状态变量,搜索单元11使用预定的大的正值作为当状态变量的值变化时的能量变化量。这可以抑制状态变量的值的变化的允许,并且抑制约束条件违反1至3的发生。
[0110] 图4示出了其中允许值变化的范围的确定的另一示例。
[0111] 在图4所示的示例中,在组gD1至gD3中,其值被允许从0变为1的状态变量是其标识号比具有值1的状态变量的标识号大1或小1的状态变量。然而,为了不导致上述约束条件违反1至3被应用,被允许变化的状态变量的标识号的上限或下限如上述示例中那样被确定。
[0112] 如图4所示的示例,当在组gD1中标识号比具有值1的状态变量的标识号大1的状态变量的值变为1时,这导致关于组gD2中的具有值1的状态变量应用约束条件违反2。因此,在组gD1中,仅允许标识号比具有值1的状态变量的标识号小1的状态变量的变化。
[0113] 当在组gD2中标识号比具有值1的状态变量的标识号小1的状态变量的值变为1时,这导致关于组gD1中具有值1的状态变量应用约束条件违反2。因此,在组gD2中,仅允许标识号比具有值1的状态变量的标识号大1的状态变量的变化。
[0114] 当在组gD3中标识号比具有值1的状态变量的标识号大1的状态变量的值变为1时,这导致约束条件违反3。因此,在组gD3中,仅允许标识号比具有值1的状态变量的标识号小1的状态变量的变化。
[0115] 如上所述进一步限制其中允许值变化的范围可以使得能够简化搜索单元11的硬件配置,搜索单元11基于在状态变量的值变化的情况下的能量变化量来确定是否允许该变化。
[0116] 在图4所示的示例中,其值被允许从0变为1的状态变量是其标识号比具有值1的状态变量的标识号大1或小1的状态变量。然而,这些值可变的状态变量不一定是其标识号比具有值1的状态变量的标识号大1或小1的状态变量。可以适当地设置值可变的状态变量。
[0117] 如上所述,利用根据第一实施方式的优化装置10,基于在某个组中具有值1的状态变量的标识号,确定在另一组中其值被允许从0变为1的状态变量的标识号的上限或下限。因此,能够根据当前状态来限制下一个其值被允许变化的状态变量的范围,并且能够搜索在不增加约束项的情况下满足约束条件的解。因此,可以提高向最优解的收敛性。
[0118] 如图1所示,包括在评估函数中的状态变量的数量是(除车厂外的节点的数量+卡车的数量‑1)的平方是足够的。因此,即使当节点的数量或卡车的数量增加时,也可以抑制状态变量的数量。
[0119] 利用优化装置10,针对(卡车数量‑1)个卡车提供指示卡车是否在每个时间处返回车厂的组gD1至gD3((卡车数量‑1)个组),并且能够通过使用这些来计算每个卡车在每条路径上的运载能力的总和。这使得能够计算用于避免其中运载能力的总和超过最大运载能力的情况的约束项(约束项的计算示例将在后面描述)。因此,不期望在例如准备满足最大运载能力的卡车的运载能力组合的多个模式以针对每个模式搜索最优解方面付出努力。因此,可以抑制最优解搜索处理的执行次数的增加。
[0120] 如上所述的确定其值被允许从0变为1的状态变量的标识号的上限或下限的技术不限于多个节点的路径问题例如CVRP,并且还可以应用于其他组合优化问题。
[0121] (第二实施方式)
[0122] 图5示出了根据第二实施方式的优化装置的示例。
[0123] 根据第二实施方式的优化装置20包括搜索单元21和转换允许范围确定单元22。
[0124] 搜索单元21执行确定处理,该确定处理基于包括在评估函数中的多个状态变量中的任何状态变量的值发生变化的情况下的能量变化量来确定该值是否可以变化。基于确定处理的结果,搜索单元21重复执行改变多个状态变量中的任何状态变量的值的更新处理,从而搜索使能量最小化的最优解。
[0125] 搜索单元21在满足1热约束(以下示例中为2向1热约束)的同时执行更新处理。与根据第一实施方式的搜索单元11的情况一样,搜索单元21可以在满足1向1热约束的同时执行更新处理。
[0126] 如上所述用于计算CVRP的如图1所示设置的16×16个状态变量(以16行16列布置的状态变量)具有2向1热约束。
[0127] 在排除对除满足2向1热约束的状态之外的状态的搜索的情况下,四个状态变量的值在单个状态转换中变化。
[0128] 当在满足2向1热约束的状态下将具有值0的状态变量之一设置为更新目标候选时,确定其他三个更新目标候选的状态变量。当具有值0的状态变量xj被设置为更新目标候选时,包括在与xj的行和列相同的行和列中的状态变量中具有值1的状态变量xi、xl被设置为更新目标候选。此外,在与xi的列相同的列中和与xl的行相同的行中具有值0的xk被设置为更新目标候选。
[0129] 当在这四个状态变量的值变化的情况下生成的伊辛模型的能量变化是ΔEj时,ΔEj能够由下面的表达式(8)表示。
[0130] ΔEj=(hi+hl)‑(hj+hk)‑(Wil+Wjk) (8)
[0131] 由于xi、xj、xk、xl的变化引起的局部字段的变化(Δhm(m=1、2、……、N))能够由下面的表达式(9)表示。
[0132] Δhm=Wjm+Wkm‑(Wim+Wlm) (9)
[0133] 搜索单元21包括ΔE计算单元21a、选择电路21b、标识号计算单元21c、更新单元21d和控制单元21e。
[0134] 在满足1热约束的组的每个组中,ΔE计算单元21a计算当通过汉明距离(Hamming distance)=4的状态转换从满足1热约束的某个状态转换到满足1热约束的另一状态时的能量变化量(ΔE1到ΔEN)。ΔE计算单元21a计算由表达式(8)表示的能量变化量,以便在满足1热约束的同时执行更新处理。
[0135] 对于由转换允许范围确定单元22针对其输出指示转换禁止的信号的状态变量或具有当前值1的状态变量,ΔE计算单元21a输出预定的大的正值作为当状态变量的值变化时的能量变化量。预定的大正值例如是能够由优化装置20输出的正的最大值。由更新单元21d输出的N个控制信号EN通知具有当前值1的状态变量。例如,与具有当前值1的状态变量相对应的控制信号EN为1,以及与具有当前值0的状态变量相对应的控制信号EN为0。
[0136] ΔE计算单元21a通过使用例如保存权重系数和局部字段的寄存器、选择用于表达式(8)和(9)的计算的权重系数的选择器、执行表达式(8)和(9)的计算的加减器等来实现。
[0137] 选择电路21b基于热激励能量与ΔE1至ΔEN之间的大小关系来输出标识号=j,该标识号=j用于标识在包括在每个组中的具有值0的状态变量中其值被允许从0变为1的状态变量之一。基于随机数和指示从控制单元21e输入的温度的参数T来确定热激励能量。热激励能量也可以称为噪声值。在某些情况下,根据热激励能量与ΔE1至ΔEN之间的大小关系,不允许任何具有值0的状态变量的变化。在下文中,假设选择电路21b将标识号=j与指示是否允许具有标识号=j的状态变量的值的变化的标志f一起输出。例如,在标志f的值为1的情况下,这指示允许状态变量的值的变化,以及在标志f的值为0的情况下,这指示不允许该变化。
[0138] 标识号计算单元21c包括例如寄存器,该寄存器存储状态变量中的每一个所属的组的标识号以及每个组中具有值1的状态变量的标识号。标识号计算单元21c基于选择电路21b输出的标识号=j来计算其他三个标识号=i、k、l。
[0139] 例如,i和l是xi和xl的标识号,xi和xl是包括在与xj的行和列相同的行和列中的状态变量中具有值1的状态变量。标识号k是在与xi的列相同的列以及与xl的行相同的行中的xk的标识号,并且k能够通过k=i+l‑j来计算。
[0140] 在下文中,假设标识号计算单元21c也输出从选择电路21b提供的标识号=j和标志f。标识号=i、j、k、l被提供给ΔE计算单元21a,并且在基于表达式(9)更新用于计算能量变化量的局部字段时使用。当标志f指示不允许变化时,标识号计算单元21c将标识号=i、j、k、l设置为例如无效值(例如,0)。
[0141] 标识号计算单元21c可以是例如其中处理器(例如CPU或GPU)基于存储在寄存器中的标识号执行如上所述的处理的单元,或者可以通过使用各种类型的逻辑电路来实现。
[0142] 更新单元21d包括保存例如N个状态变量(x1至xN)的值的存储单元21d1。存储单元21d1例如通过使用电子电路例如寄存器、SRAM等来实现。当标志f指示允许变化时,更新单元21d将具有由标识号计算单元21c输出的标识号=i、l的状态变量的值从1更新为0,并且将具有标识号=j、k的状态变量的值从0更新为1。
[0143] 更新单元21d基于与具有标识号=i、j、k、l的状态变量的变化相对应的能量变化量来更新能量。存储单元21d1在每次更新时保存最小能量以及获得最小能量时的状态(能量处于最小值时的状态)。更新单元21d将上述x1至xN和控制信号EN提供给ΔE计算单元21a。
[0144] 更新单元21d可以通过使用以下来实现:用于更新能量的加法电路、将更新的能量与先前的最小能量进行比较的比较器、将具有标识号=i、j、k、l的状态变量的值从0反转为1或从1反转为0的各种类型的逻辑电路等。
[0145] 控制单元21e执行优化装置20的初始设置处理。作为初始设置处理,执行用于表达式(4)的计算的权重系数的设置、局部字段和状态变量的初始值的设置、状态变量所属的组的标识号的设置等。设置状态变量的初始值,使得在组的每个组中满足1热约束。例如,对于稍后要描述的转换允许范围确定单元22针对其确定其中允许值变化的范围的组,设置热位,使得如上所述的约束条件违反1至3不被应用。
[0146] 每当更新伊辛模型的状态的更新处理重复预定次数时,控制单元21e例如根据从外部指定的温度计划来减小T的值。
[0147] 例如,控制单元21e在更新处理已经被重复预定重复次数之后获得由存储单元21d1保存的状态(x1至xN),并且将状态(x1至xN)输出到外部作为优化问题的解。控制单元
21e可以在更新处理已经被重复预定重复次数之后获得并输出由存储单元21d1保存的最小能量以及当能量处于最小值时的状态。控制单元21e可以将获得的各种类型的信息输出到显示装置(未示出)以便显示该信息,或者可以将该信息发送到外部信息处理装置。
[0148] 控制单元21e可以例如通过电子电路诸如ASIC或FPGA来实现。控制单元21e可以是处理器例如CPU或GPU。在这种情况下,处理器通过执行存储在存储器(未示出)中的程序来执行上述处理。
[0149] 转换允许范围确定单元22针对多个组确定其中允许值变化的范围,使得预定约束条件违反不被应用。
[0150] 图6示出了转换允许范围确定单元的示例。
[0151] 转换允许范围确定单元22包括存储单元22a、热位更新单元22b、边界值计算单元22c和转换允许‑禁止信号输出单元22d。
[0152] 存储单元22a存储例如N个状态变量的值和标识号、状态变量所属的组的标识号、用于标识针对其确定转换允许范围的多个组的状态变量的标识号以及组大小(属于单个组的状态变量的数量)。存储单元22a还存储在针对其确定转换允许范围的组的每个组中的热位的标识号。在由控制单元21e执行的上述初始设置处理中,这些标识号和组大小被存储在存储单元22a中。存储单元22a还存储由边界值计算单元22c计算的在针对其确定转换允许范围的组的每个组中其值被允许从0变为1的状态变量的标识号的边界值(上限和下限)。存储单元22a例如是电子电路诸如SRAM或寄存器。
[0153] 热位更新单元22b基于由标识号计算单元21c输出的标识号=j、k和标志f以及保存在存储单元21d1中的状态(x1至xN)来更新存储在存储单元22a中的热位的标识号。例如,当j或k与针对其确定存储在存储单元22a中的转换允许范围的组的状态变量的标识号相匹配并且xj或xk变为1时,热位更新单元22b将j或k设置为该组的热位的标识号。这样的热位更新单元22b可以通过各种类型的逻辑电路来实现。
[0154] 基于状态变量、热位的标识号以及针对其确定转换允许范围的组的每个组的组大小,边界值计算单元22c计算组中其值被允许从0变为1的状态变量的标识号的边界值(上限和下限)。
[0155] 图7示出了边界值的计算的示例。
[0156] 图7示出了其中计算边界值使得如上所述的约束条件违反1至3不被应用的示例。
[0157] 在组gD1中,下限Min是通过将1与组gD1的状态变量的第一标识号相加而获得的值,以及上限Max是通过从组gD2的热位的标识号减去18而获得的值。如上所述,18是组大小(16)+2。
[0158] 在组gD2中,下限Min是通过将18与组gD1的热位的标识号相加而获得的值,以及上限Max是通过从组gD3的热位的标识号减去18而获得的值。
[0159] 在组gD3中,下限Min是通过将18与组gD2的热位的标识号相加而获得的值,以及上限Max是通过从组gD3的状态变量的最后标识号减去1而获得的值。
[0160] 执行这样的处理的边界值计算单元22c通过使用例如各种类型的逻辑电路诸如加法和减法电路等来实现。
[0161] 转换允许‑禁止信号输出单元22d基于由边界值计算单元22c计算并存储在存储单元22a中的边界值,针对属于多个组的状态变量中的每一个输出指示值变化的允许或禁止的信号(转换允许‑禁止信号)。
[0162] 图8示出了转换允许‑禁止信号输出单元和存储单元的示例。
[0163] 图8示出了存储在存储单元22a中存储的部分信息的寄存器组22a1、22a2、22a3、22a4、22a5。
[0164] 寄存器组22a1存储x1至xN的标识号(1至N),寄存器组22a2存储x1至xN分别所属的组的标识号(g1至gN),以及寄存器组22a3存储x1至xN的值。寄存器组22a4存储x1至xN分别所属的组中的上述下限(Min1至MinN),以及寄存器组22a5存储x1至xN分别所属的组中的上述上限(Max1至MaxN)。
[0165] 当具有标识号=j的状态变量(xj)所属的组的标识号与针对其确定存储在存储单元22a中的转换允许范围的组的标识号匹配时,更新Min1至MinN以及Max1至MaxN中的第j个Minj和Maxj。因此,上述下限和上限保持在与针对其确定转换允许范围的组不同的组的初始值中。
[0166] 转换允许‑禁止信号输出单元22d包括转换允许‑禁止位生成电路22d1、22d2、……、22dN。转换允许‑禁止位生成电路22d1至22dN基于x1至xN、Min1至MinN和Max1至MaxN的值生成并输出指示分别针对x1到xN是否允许值从0变为1的转换允许‑禁止位p1、p2、……、pN。因此,转换允许‑禁止信号输出单元22d输出通过使用N个转换允许‑禁止位p1至pN的转换允许‑禁止信号。
[0167] 图9示出了转换允许‑禁止位生成电路的示例。
[0168] 图9示出了图8所示的转换允许‑禁止位生成电路22d1至22dN中的第i个转换允许‑禁止位生成电路22di的电路示例。其他转换允许‑禁止位生成电路也可以通过类似的电路配置来实现。
[0169] 转换允许禁止位生成电路22di包括比较电路30、31和负“与”(与非)电路32。
[0170] 比较电路30输出标识号=i与xi所属组中的上述下限Mini之间的比较结果。比较电路30在Mini≤i的情况下输出1,以及在Mini>i的情况下输出0。
[0171] 比较电路31输出标识号=i与xi所属组中的上述上限Maxi之间的比较结果。比较电路30在Maxi≥i的情况下输出1,以及在Maxi
[0172] 与非电路32输出比较电路30、31的输出信号与通过反转xi值获得的值(在xi值为0的情况下为1,在xi值为1的情况下为0)之间的与非。在所有三个输入都是1的情况下,与非电路32输出指示允许xi的值从0变到1的0作为转换允许‑禁止位pi。在三个输入中的至少一个为0的情况下,与非电路32输出指示禁止xi的值从0变到1的1作为转换允许‑禁止位pi。
[0173] 如上所述的转换允许范围确定单元22的使用使得能够针对多个组确定其中允许值变化的范围,使得预定约束条件违反不被应用。
[0174] 对于与针对其确定转换允许范围的组不同的组,例如,将上述下限的初始值设置为1并且将上述上限的初始值设置为N是足够的。在这样的情况下,针对属于不同组的状态变量输出指示允许从0到1的值变化的转换允许‑禁止位0。
[0175] (用于考虑CVRP的约束条件的能量变化量的第一种计算技术)
[0176] 如上所述,在CVRP中,存在这样的约束条件:在该约束条件下,对于所有路径,除了路径上的车厂之外的节点的需求的总值在单辆卡车的最大运载能力内。例如,路径(DTOT1至DTOT4)中的每条路径上的四辆卡车的运载能力的总和能够通过上述表达式(6)来计算,并且这些是关于状态变量的二次式。因此,DTOT1至DTOT4能够被转换成下面的表达式(10)。
[0177]
[0178] 在表达式(10)中,x是(x1、x2、……、xN)矩阵,并且V1至V4中的每一个都是N×N矩阵。
[0179] 当最大运载能力为Q时,上述约束条件能够被表示为DTOT1至DTOT4≤Q。
[0180] 包括这样的二次不等式约束作为约束项的评估函数能够由下面的表达式(11)表示。
[0181] E=C+max(DTOT1‑Q,0)+…+max(DTOT4‑Q,0) (11)
[0182] 在表达式(11)中,C是成本项并且表示四辆卡车的总移动距离。成本项C能够由下面的表达式(12)表示。
[0183]
[0184] 在表达式(12)中,W是具有如表达式(1)中所表示的Wij的N&×N矩阵。
[0185] 如上所述的评估函数的值的变化(能量变化量)ΔE能够由下面的表达式(13)表示。
[0186]
[0187] 在如图5所示的ΔE计算单元21a中,为了如上所述如表达式(13)所示计算ΔE,ΔC、ΔP1至ΔP4可以被分别并行计算并相加在一起。
[0188] 图10示出了ΔE计算单元的示例。
[0189] ΔE计算单元40包括存储单元41a、41b1至41b4、ΔC计算电路42a、ΔDTOT计算电路42b1至42b4和ΔE输出电路43。
[0190] 存储单元41a存储上述W。存储单元41b1至41b4存储上述V1至V4。存储单元41a、41b1至41b4可以通过例如使用电子电路诸如寄存器、SRAM等来实现。
[0191] ΔC计算电路42a针对x1至xN中的每一个计算与如由表达式(8)表示的ΔEj相对应的能量变化量(ΔC)。提供给ΔC计算电路42a的标识号=i、j、k、l用于选择用于计算的W的元素。表达式(8)的(例如,保存在寄存器中的)局部字段被传播到电路,该电路通过使用x1至xN来针对x1到xN中的任何一个计算能量变化量。
[0192] 然而,ΔC计算电路42a输出大的正值作为针对对应的控制信号EN为1的状态变量或转换允许‑禁止位p1至pN中对应的一个为1的状态变量的变化量。
[0193] ΔDTOT计算电路42b1至42b4针对x1至xN中的每一个计算与如由表达式(8)表示的ΔEj相对应的能量变化量(ΔDTOT1至ΔDTOT4)。然而,与ΔC计算电路42a不同,ΔDTOT计算电路42b1至42b4使用V1至V4而不是W。例如,ΔDTOT计算电路42b1通过使用V1来针对每个x1至xN计算能量变化量ΔDTOT1。
[0194] 提供给ΔDTOT计算电路42b1至42b4的标识号=i、j、k、l用于选择用于计算的V1至V4的元素。表达式(8)的局部字段被传播到通过使用x1至xN来针对x1至xN中任何一个计算能量变化量的电路。
[0195] ΔDTOT计算电路42b1至42b4还可以输出大的正值作为针对对应的控制信号EN为1的状态变量或对应的转换允许‑禁止位p1至pN为1的状态变量的变化量。
[0196] 基于表达式(13),ΔE输出电路43计算并输出ΔE1至ΔEN,ΔE1至ΔEN是针对x1至xN的相应能量变化量。
[0197] (用于考虑CVRP的约束条件的能量变化量的第二种计算技术)
[0198] 根据第二种计算技术,优化装置20基于表达式(7)计算并存储在时间t中的每一个处的需求的总Dt。优化装置20存储指示卡车在时间t处是否经过路径i的变量ri,t。
[0199] 图11示出了Dt和ri,t的存储示例。
[0200] 图11示出了当i=1至4、t=1至16时的Dt和ri,t的存储示例。关于ri,t,ri,t在卡车在时间t处通过路径i的情况下为1,以及在卡车在时间t处不通过路径i的情况下为0。
[0201] 在x1至xN中,根据其值变化的状态变量的标识号,存在相同路径上的要访问的节点顺序改变的情况1、在+不同路径之间交换要访问的节点的情况2以及交换要访问的车厂的顺序和要访问的节点的顺序的情况3。
[0202] 图12示出了情况1的示例。
[0203] 图12示出了这样的示例:在该示例中,在具有四辆卡车和13个节点的CVRP如图1的情况那样被计算的情况下,在状态变量(边框15中的16×16个状态变量)中,通过四个状态变量的值变化来交换访问具有节点编号=2、4的节点的顺序。
[0204] 在情况1中,在图12所示的示例中,在时间t中的每一个处的需求的总Dt中,交换了D2和D3。然而,每条路径上的总运载能力(DTOT1至DTOT4)没有变化。因此,如由表达式(11)表示的评估函数中的约束项不改变。
[0205] 图13示出了情况1的状态转换之前和状态转换之后的ri,t的存储示例。
[0206] 在情况1中,如图13所示,ri,t在状态转换(四个状态变量的变化(四位转换))之前和状态转换之后不改变。
[0207] 图14示出了情况2的示例。
[0208] 在图14所示的示例中,在第一路径中,卡车在时间t=2处访问的节点从具有节点编号=2的节点变为具有节点编号=3的节点。在第二路径中,卡车在时间t=3处访问的节点从节点编号=3的节点变为节点编号=2的节点。例如,要访问的节点在不同的路径之间交换。
[0209] 在情况2中,在时间t中的每一个处的需求的总Dt中,交换D2和D6,并且改变DTOT1和DTOT2。因此,约束项发生变化。然而,情况2的状态转换之前和状态转换之后的ri,t与图13中的类似,并且在转换之前和转换之后不改变。
[0210] 图15示出了情况3的示例。
[0211] 在图15所示的示例中,在第一路径中,卡车在时间t=3处返回到车厂,而不是访问具有节点编号=4的节点。在第二路径中,卡车在时间t=5处访问具有节点编号=4的节点,而不是在车厂中。
[0212] 在情况3中,在时间t中的每一个处的需求的总Dt中,D3和D5被交换,并且DTOT1和DTOT2被改变。因此,约束项发生变化。
[0213] 图16示出了情况3的状态转换之前和状态转换之后的ri,t的存储示例。
[0214] 在情况3中,在状态转换之前和状态转换之后,两条路径中要访问的节点数量发生了变化。因此,如图16所示,针对两条路径的ri,t在状态转换之前和状态转换之后也发生变化。
[0215] 优化装置20基于Dt和ri,t计算DTOT1至DTOT4,并考虑上述情况1至3计算ΔDTOT1至ΔDTOT4。如上所述,在情况1的状态转换中,DTOT1至DTOT4不改变。相比之下,在情况2、3的状态转换中,DTOT1至DTOT4中的任何两个发生变化。
[0216] 在图14所示的示例中(情况2),状态转换之前的DTOT1是DTOT1=D1+D2+D3+D4+D5,以及状态转换之前的DTOT2是DTOT2=D6+D7+D8。状态转换之后的DTOT1为DTOT1=D1+D'2+D3+D4+D5,以及状态转换后的DTOT2为DTOT2=D'6+D7+D8。此处,D'2=‑D'6。
[0217] 状态转换之前和状态转换之后的运载能力之和的变化是ΔDTOT1=ΔD2=D'2‑D2。这能够由下面的表达式(14)表示。
[0218]
[0219] 在表达式(14)中,Δr1,i表示在时间t=i处的状态转换之前和状态转换之后的r1,i的变化。在图14的示例中,Δr1,i为0。
[0220] 同时,表示ΔDTOT2=‑ΔDTOT1是可能的。
[0221] 在图15所示的示例中(情况3),状态转换之前的DTOT1是DTOT1=D1+D2+D3+D4+D5,以及状态转换之前的DTOT2是DTOT2=D6+D7+D8。状态转换之后的DTOT1为DTOT1=D1+D2+D'3,以及状态转换之后的DTOT2为DTOT2=D4+D'5+D6+D7+D8。
[0222] 状态转换之前和状态转换之后的运载能力之和的变化是ΔDTOT1=ΔD3‑(D4+D5)=ΔD3+(D4Δr1,4+D5Δr1,5)。这能够由下面的表达式(15)表示。
[0223]
[0224] 在表达式(15)中,Δr1,i表示在时间t=i处的状态转换之前和状态转换之后的r1,i的变化。在情况3中,Δr1,i为1。
[0225] 同时,表示ΔDTOT2=‑ΔDTOT1是可能的。
[0226] 当考虑上述示例时,在某条路径p中的状态转换之前和状态转换之后的运载能力之和的变化ΔDTOTp能够通过以下阶段来计算。
[0227] 阶段1:优化装置20生成转换候选的四个状态变量的标识号=i、j、k、l。
[0228] 阶段2:优化装置20基于标识号=i、j、k、l来计算路径p,在该路径p上运载能力的总和发生变化。
[0229] 阶段3:优化装置20获得其中针对路径p的运载能力之和发生变化的标识号的区间[s1,s2]。
[0230] 阶段4:优化装置20计算针对区间[s1,s2]的ΔDt、Δri,t。
[0231] 阶段5:优化装置20基于下面的表达式(16)计算ΔDTOTp。
[0232]
[0233] 在优化装置20中,为了执行如上所述的阶段1至5,例如,可以使用如下所述的ΔE计算单元。
[0234] 图17示出了ΔE计算单元的另一示例。在图17中,与图10所示的元件相同的元件由相同的附图标记表示。
[0235] ΔE计算单元50包括存储单元51、更新电路52、转换候选生成电路53、路径p计算电路54、ΔDTOT计算电路55和ΔE输出电路56。
[0236] 如图11所示,存储单元51存储Dt和ri,t。存储单元51可以通过例如使用电子电路诸如寄存器、SRAM等来实现。
[0237] 更新电路52基于x1至xN的值更新存储在存储单元51中的Dt和ri,t。
[0238] 转换候选生成电路53基于x1至xN的值生成转换候选的四个状态变量的标识号=i、j、k、l。例如,转换候选生成电路53从其当前值为0的状态变量的标识号中选择标识号=j,并且将生成其他标识号=i、k、l的处理重复与具有值0的状态变量的数量一样多的次数,使得满足2向1热约束。然而,转换候选生成电路53不使用其转换允许‑禁止位p1至pN为1的状态变量的标识号作为标识号=i、j、k、l中的任何一个。
[0239] 如图4所示,如上所述进一步限制其中允许值变化的范围可以使得能够简化转换候选生成电路53和执行后续处理的电路的硬件配置。
[0240] 路径p计算电路54基于由转换候选生成电路53生成的标识号=i、j、k、l来计算运载能力之和发生变化的路径p。例如,该处理被执行与由转换候选生成电路53生成的标识号=i、j、k、l的集合的数量一样多的次数。
[0241] ΔDTOT计算电路55获得其中路径p的运载能力之和发生变化的标识号的区间[s1,s2]。例如,在图14所示的示例的情况下(情况2),s1=s2=2,并且在图15所示的示例的情况下(情况3),s1=3,s2=5。基于Dt和ri,t,ΔDTOT计算电路55计算针对区间[s1,s2]的ΔDt和Δri,t,并且如表达式(16)所示计算ΔDTOTp。
[0242] ΔE输出电路56基于Dt和ri,t来计算DTOTp。ΔE输出电路56通过针对运载能力之和发生变化的所有路径p将ΔPp与由ΔC计算电路42a针对x1至xN中的每一个输出的ΔC相加,来计算并输出ΔE1至ΔEN。此处,ΔPp=max(DTOTp+ΔDTOTp‑Q,0)‑max(DTOTp‑Q,0)。
[0243] (优化装置20的整体操作的示例)
[0244] 图18是示出优化装置的整体操作流程的示例的流程图。
[0245] 尽管下面描述了使用模拟退火方法的情况作为示例,但是本公开内容不限于此,并且可以使用诸如副本交换方法的技术。
[0246] 首先,在控制单元21e的控制下,执行初始设置处理(步骤S1)。在初始设置处理中,控制单元21e执行用于表达式(4)的计算的权重系数的设置、局部字段和状态变量的初始值的设置、状态变量所属的组的标识号的设置等。当使用上述用于ΔE的第一种计算技术时,控制单元21e将V1设置为V4。当使用用于ΔE的第二种计算技术时,控制单元21e设置Dt和ri,t的初始值。
[0247] 设置状态变量的初始值,使得在组的每个组中满足1热约束。例如,对于转换允许范围确定单元22针对其确定其中允许值变化的范围的组,设置热位,使得如上所述的约束条件违反1至3不被应用。
[0248] 控制单元21e基于预定的温度变化计划、更新处理的重复次数等来设置T的初始值。
[0249] 然后,转换允许范围确定单元22确定其中允许值变化的范围(转换允许范围)(步骤S2)。
[0250] 在满足1热约束的组的每个组中,ΔE计算单元21a、40、50计算当通过汉明距离=4的状态转换从满足1热约束的状态转换到满足1热约束的另一状态时的ΔE1至ΔEN(步骤S3)。
[0251] 对于作为转换允许范围确定单元22针对其输出指示转换禁止的信号的状态变量或具有当前值1的状态变量的转换禁止位,ΔE计算单元21a、40、50输出预定的大的正值作为能量变化量。
[0252] 在已经执行了步骤S3中的处理之后,选择电路21b基于ΔE1至ΔEN选择标识号=j(步骤S4)。
[0253] 步骤S4的处理是基于ΔE1至ΔEN确定是否允许x1至xN中的任何一个的变化的确定处理。例如,选择电路21b将基于T和均匀随机数生成的热激励能量与ΔE1至ΔEN中的每一个进行比较,选择小于热激励能量的能量变化量,并且将对应于该变化量的标识号选择为j。当存在小于热激励能量的多个能量变化量时,选择电路21b例如根据预定规则或随机地从这些能量变化量中选择能量变化量中的一个。当不存在小于热激励能量的能量变化量时,任何状态变量都不会发生变化。然而,选择电路21b可以通过例如将热激励能量与偏移值相加来促进状态转换的生成。
[0254] 此外,在已经执行了步骤S4的处理之后,标识号计算单元21c根据选择的标识号=j计算标识号=i、k、l(步骤S5)。
[0255] 然后,执行更新处理(步骤S6)。在步骤S6的处理中,ΔE计算单元21a、40、50更新局部字段,并且更新单元21d更新存储在存储单元21d1中的四个状态变量。当使用ΔE计算单元50时,存储在存储单元51中的Dt和ri,t由更新电路52进行更新。
[0256] 在步骤S6的处理中,存储在存储单元22a中的热位的标识号由转换允许范围确定单元22的热位更新单元22b进行更新。
[0257] 控制单元21e确定步骤S2至S6中的处理的重复次数是否已经达到预定次数N1(步骤S7)。当重复次数没有达到预定次数N1时,重复从步骤S2开始的处理。
[0258] 当重复次数已经达到预定次数N1时,控制单元21e确定T的变化次数(温度变化次数)是否已经达到预定次数N2(步骤S8)。
[0259] 当温度变化的次数没有达到预定次数N2时,控制单元21e改变T(降低温度)(步骤S9)。基于预定的温度变化计划等来确定改变T的值的方式和预定次数N1、N2(例如,这些值一次被减少到什么程度)。在已经执行了步骤S9中的处理之后,重复从步骤S2开始的处理。
[0260] 例如,当温度变化次数已经达到预定次数N2时,控制单元21e输出在该时间处保存在存储单元21d1中的所有状态变量的值作为计算结果(步骤S10),并结束处理。每次状态转换发生时,控制单元21e可以基于所有状态变量的值来计算能量,顺序地更新通过其获得最小能量的所有状态变量的值,并且在温度变化次数已经达到预定次数N2时输出所有状态变量的值作为解。
[0261] 上述处理的顺序不限于上述示例,并且处理的循环可以适当地互换。
[0262] 如上所述,根据第二实施方式的优化装置20产生与根据第一实施方式的优化装置10的效果类似的效果。例如,基于在某个组中具有值1的状态变量的标识号,转换允许范围确定单元22确定在另一组中其值被允许从0变为1的状态变量的标识号的上限或下限。因此,能够根据当前状态来限制下一个其值被允许变化的状态变量的范围,并且能够搜索在不增加约束项的情况下满足约束条件的解。因此,可以提高向最优解的收敛性。
[0263] 虽然已经基于实施方式描述了根据本公开内容的优化装置和优化的方法的方面,但是这些仅仅是示例性的,并且本公开内容不限于以上描述。