Julia 1.0.2.1:为什么变量在没有赋值的情况下更改值



我正在 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)

最新更新