我正在 Julia 中构建一个元启发式方法,用于研究目的。
目的是找到盒子的最佳顺序。
1(我从定义为的初始顺序(随机顺序(开始。顺序 = 在我的 while 循环之前初始化顺序。
2( 对于 while 循环中的每个迭代,我设置 CurrentOrder = Order
3( 当前订单更改时,订单也会更改。为什么订单会在未分配的情况下更改值?我该如何避免它?
版本:朱莉娅临 1.0.2.1
编辑:原子
while ( (time_ns()-timestart)/1.0e9 < RunLength && done == false ) #Stopping Criteria
done = true #Starting point
IterationCount = IterationCount + 1
BestCurrentValue = sum(H) #Worst case solutio
CurrentOrder = Order #(From,To)
for n1=1:N
for n2=1:N
if n1 != n2
(CurrentOrder,CopyTo) = SwapBox(CurrentOrder,n1,n2) #Swap boxes
(CurrentLayout,L) = DeltaCopy(CurrentLayout,CopyTo,CurrentOrder) #Delta Copy to minimise calculations
(TempLayout,L) = BLV(BinW,CurrentLayout,CopyTo,CurrentOrder,W,H,L) #Evalueate by BLV
if L < BestCurrentValue #check if TempLayout is better than Best Current
BestCurrentValue = L
BestCurrentOrder = CurrentOrder
BestCurrentLayout = CurrentLayout
end #if L<...
end #if n1 != n2
##############################################################################
CurrentOrder = Order
##############################################################################
end #n2 in N
end #n1 in N
if BestCurrentValue < BestValue
done = false #Look further
BestValue = BestCurrentValue
BestOrder = BestCurrentOrder
BestLayout = BestCurrentLayout
Order = BestOrder
end #if BestCurrentValue...
end #while
你的赋值NewOrder=Order
不会复制内存中的任何信息,它只是说变量NewOrder
应该指向与Order
相同的内存位置。因此,更改其中一个变量也会更改另一个变量。如果要复制变量,可以使用NewOrder=deepcopy(Order)