{基因演算法}

算基因

先來個問題

旅行者問題

有一個人,要從\(1\)出發去 \( n \) 個國家旅遊,對於從國家 \(i\)到\(j\),旅行所需要的成本為 \(C_{ij}\) ,求可以最小化成本的旅行順序

怎麼做?

可以枚舉嗎?

# CHAPTER 2

\(n\)點排列,複雜度 \(O(n!)\)

顯然不行

那 DP ? 

轉移式

# PRESENTING CODE

對於在城市\(x\),\(TSP[S][x] = min( TSP[S-x][i]+dis(x,i))\)

令\(S\)為已造訪過的城市(用位元表示)

int TSP(int statis, int x){
	if(dp[statis][x] != -1)return dp[statis][x];
    
    int mask = 1 << x;
    dp[status][x] = 1e9;
    
	for ( int i = 0; i < n; ++i )
	  if ( i != x && ( status & ( 1 << i ) ) ) // i 在status裏面
		dp[ status ][ x ] = min( dp[ status ][ x ],
        				TSP( status - mask, i ) + graph[ i ][ x ] );
	return dp[ status ][ x ];
}
# CHAPTER 2

這樣好嗎?

基本上很麻煩又慢,複雜度仍是指數

事實上,這是一個 NP Hard Question

空間複雜度:\(O(2^n \times n)\)

比賽中可以用,但現實中沒啥作用

時間複雜度:\(O(2^n)\)我不會算

{那要怎麼辦?}

精確解不可能解得出來,所以我們需要一些特別的方法

{啟發式算法}

{基因演算法}

把解比擬成染色體

什麼意思?

假設今天有十個解

4, 1, 5, 3, 2, 7, 8, 6, 0, 9

4, 2, 6, 7, 8, 9, 3, 5, 1, 0

1, 3, 5, 4, 2, 7, 9, 6, 8, 0

基因

染色體

族群

# PRESENTING CODE

Crossover

# PRESENTING CODE

Mutation

增加遺傳變異性

# PRESENTING CODE

計算適應度

然後?

適者生存

一直重複,就會有近似最佳解

{實作}(?)

DEAP

我不會

工作排程問題

時刻表排點

其他用途

{THE END}

我講得好爛

Made with Slides.com