Юлия 1.0.2.1: Почему переменная меняет значение без присваивания? - PullRequest
0 голосов
/ 01 апреля 2019

Я строю метаэвристику в Юлии для учебы.

Цель состоит в том, чтобы найти лучший заказ коробок.

1) Я начинаю с начального порядка (случайного порядка), определенного как. Order = InitOrder перед моим циклом while.

2) Для каждой итерации в цикле while я устанавливаю CurrentOrder = Order

3) При изменении CurrentOrder изменяется и Порядок. Почему Заказ меняет стоимость без назначения? И как мне этого избежать?

Версия: JuliaPro 1.0.2.1

Редактор: Atom

        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

1 Ответ

2 голосов
/ 01 апреля 2019

Ваше назначение NewOrder=Order не копирует какую-либо информацию в память, оно просто говорит, что переменная NewOrder должна указывать на то же место в памяти, что и Order.Таким образом, изменение одной из этих переменных также изменит другую.Если вы хотите скопировать переменную, вы можете использовать NewOrder=deepcopy(Order)

...