2016年5月18日 星期三

Scala shell for Eclipse

在終端機下達指令brew install scala

Scala IDE for Eclipse 安裝

Help->Install New Software->Add

Name: Scala IDE
Location: http://download.scala-ide.org/sdk/lithium/e44/scala211/stable/site

把 Scala IDE for Eclipse 和 Scala IDE for Eclipse Development Support兩個選項打勾

然後等待一段時間下載


開一個Scala專案

輸入HolloWorld.scala 檔案

object HellWorld extends App {
  println("hello,")
}

執行看看有沒有差

不能使用Application 因為
Application has been deprecated from scala 2.9, probably it has been deleted in scala 2.11 (it still exists in scala 2.10) even though at the moment I can't find proofs for that, use App instead.

2016年5月8日 星期日

基因演算法運用及程式碼

碩士期間剛好有一堂是最佳演算法,講到基因演算法的運用和作業

剛好有機會記下來,與網友們一起討論使用

題目是:


1. 題目
Max f (x1, x2 ) = 21.5 + x1 sin(4πx1) + x2 sin(20πx2 )
−3.0 ≤ x1 ≤ 12.1, 4.1 ≤ x2 ≤ 5.8
試以基因演算法求最大值f
2. 基因演算法(以流程圖或虛擬碼表示即可)
3. 設計編碼方式 (使用二進位編碼來代表 x1 x2 的值)
4. 決定群體規模 (族群數量)
5. 設計適應函數 (決定個體適應度的評估標準)
6. 決定挑選與複製方法
7. 定義交配與交配機率
8. 定義突變與突變機率
9. 決定終止條件
10. 結果與討論(含收斂過程圖)

我的解法

2.基因演算法流程圖


3.編碼方式

假設某個數值x1=11.1
X1==11.1;
If(x1==11.1)
{
  x1=(x1+3)*10;
  x1_binary=
Integer.toBinary (x1);
}
x1_binary==10001101;

假設某個數值x1 二進位= 10001101
x1_binary==10001101;
If(x1_binary==10001101)
{
  x1=Integer.valueOf(x1_binary);
  x1=x1/10-3;
}
X1==11.1;
假設某個數值x1=-3.0
X1==0;
If(x1==-3.0)
{
  x1=(x1+3)*10;
  x1_binary=
Integer.toBinary (x1);
}x1_binary== 00000000;

假設某個數值x1 二進位= 00000000
x1_binary== 00000000;
If(x1_binary==00000000)
{
  x1=Integer.valueOf(x1_binary);
  x1=x1/10-3;
}
X1==0;

4.群體規模 (族群數量)

初始群體規模為
int groundCount=10;
經過第一次交配,以後規模擴增為
copulationCount=groundCount*2;
5.適應函數
直接代入
Max f (x1, x2 ) = 21.5 + x1 sin(4πx1) + x2 sin(20πx2 )
f當適應函數

6.
挑選與複製方法
樣本基因利用公式計算出來的各個f
取出
10%優秀f樣本基因、前30%優秀樣本基因、前70%優秀樣本基因、前90%優秀樣本基因(輪盤式選擇)
複製完後放入交配池(激增兩倍基因)

7.
交配與交配機率
一開始隨機取出兩對基因
把第一對x1前四碼和第二對x2前四碼交配出新基因的x1
把第一對x2前四碼和第二對x1前四碼交配出新基因的x2
強制交配出特定數量

8.
突變與突變機率   
 在交配的時候,有十分之一的機率發生突變,當發生突變的時候,隨機x1x2發生突變,突變是隨機挑選binary的其中一個做改變。

e.gs., 10001101=>10101101(第三位發生突變)

9.
終止條件 

其繁延代數跑完,就是終止條件


10.結果與討論

 因為我起始基因個數非常的低(設定為10),所以我依靠演化(交配、突變)來使基因越來越好,但非常依靠繁延代數。

總而言之,每一代的基因都有往好的地方發展出去!所以繁延代數越高,基因品質越好。



以下是程式碼: