1

遺伝的アルゴリズムの作成に成功したので、現在、 GA と比較するためのシミュレートされたアニーリング プログラムを作成していますが、グローバルなものを気にせず、どのような種類の最適化にも到達できないようです。

少しテストした後、問題は変数を while ループに戻すことだと思います。テストの目的で、基本的に前のソリューションよりもエネルギー デルタが低いソリューションのみを受け入れるようにコードを変更したので、最適なソリューションを格納する変数はより低い数値しか表示しないことを期待する必要がありますが、実際には変動し、常に最も多くの値を返します。それが良いかどうかにかかわらず、最近の解決策。どんな助けでも大歓迎です。

while temperature >0.01:
    solutionlength = len(Solution)
    NeighbourSolution = Solution
    switch1 = i % solutionlength
    i +=random.randint(0,100)
    switch2 = i % solutionlength
    NeighbourSolution[switch1], NeighbourSolution[switch2] = NeighbourSolution[switch2], NeighbourSolution[switch1]
    EnergyOld = Solution.get_changeover_times()
    EnergyNew = NeighbourSolution.get_changeover_times()
    EnergyDelta = EnergyNew - EnergyOld

    if EnergyDelta < 0:
        acceptanceprob = 1

    else:
        acceptanceprob = 0 #math.exp(-EnergyDelta/temperature)

    if acceptanceprob > 0: #random.random():
        Solution = NeighbourSolution

    if Solution.get_changeover_times() < bestsolution.get_changeover_times():
        bestsolution = Solution

    print (bestsolution.get_changeover_times())

    temperature -= coolingrate
4

1 に答える 1