def evaluate(nodes, adj, sol, alpha): s = [0 for i in nodes] d = [0 for i in nodes] bal = 0 for i in nodes: if sol[i] == 0: bal += 1 else: bal -= 1 for j in adj[i]: if sol[j] == sol[i]: s[i] += 1 else: s[i] -= 1 cost = 0 for i in nodes: cost += d[i] cost /= 2 cost += alpha*abs(bal) return cost, bal, s, d def find_move_rnd(n, sol, alpha, s, d, bal): istar = random.randint(0,n-1) part = sol[istar] i
![グラフ分割問題をsimulated annealingで](https://cdn-ak-scissors.b.st-hatena.com/image/square/05f0989c297570e13a021a54439f53edb23f0205/height=288;version=1;width=512/http%3A%2F%2Fwww.kzfmix.com%2Fimages%2Fblog%2Fpath090616.png)