[討論] 基因演算法 交配問題

看板MATLAB作者 (<>)時間8年前 (2016/10/28 22:49), 8年前編輯推噓2(206)
留言8則, 3人參與, 最新討論串1/1
初學matlab , 想要簡單實踐基因演算法的邏輯,而不是用套件 我的交配(crossover)邏輯是有參考一篇paper所提供的 以下舉例: 1~6個數值 V V V P1 = [1,2,3,4,5,6] V V V P2 = [2,4,1,3,6,5] 我生成C1的方法是固定P2的位置(第2,4,6的位置),然後當作C1的值 V V V C1 = [X,4,X,3,X,5] ,而剩下的X的值則由P1扣除掉4,3,5的值照順序填入 P1 = [1,2,3(X),4(X),5(X),6] --> [1,2,6] C1 = [1,4,2,3,6,5] 就是我求得的C1 子代的值 ,C2也同理 我在matlab上面我可以在固定位置的情況下達成,例如固定2,4,6的位置 P2([2,4,6]) %固定P2位置 P2_X = (P2([2,4,6])) % 令一個值存取叫P2_X Y1=P1 % 令一個新矩陣叫Y1 for i = 1:3 Y1(Y1==P2_X(i)) = [] % 把Y1裡面有P2_X重複的值挑出來 由於我都知道位置 所以 C1 = [Y1(1),P2(2),Y1(2),P2(4),Y1(3),P2(6)] % 我就可以土法煉鋼的把C1填出來 但是我想知道的是,當我位置隨機給定,不再是2,4,6而是其他隨機產生的值 我有什麼方法可以做到我的交換邏輯,因為初學還不是很熟很多語法 我只能用比較笨的方法做...希望各位大大能指點 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.86.113 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1477666199.A.2E5.html ※ 編輯: pk790127 (36.238.93.87), 10/29/2016 01:43:32

10/31 21:18, , 1F
ind=[2 4 6];[x,ind2]=setdiff(P1,P2(ind),'stable');
10/31 21:18, 1F

10/31 21:18, , 2F
C1=P2;C1(ind2)=x;
10/31 21:18, 2F

11/02 20:38, , 3F
感謝~ 有大概懂matlab矩陣的邏輯,雖然照這方法還是不行
11/02 20:38, 3F

11/02 20:39, , 4F
不過我用for迴圈硬灌解決了 但是還是想知道上述的方法
11/02 20:39, 4F

11/02 20:55, , 5F
因為沒有實機測試過,所以不行也是理所當然的 (咦?)
11/02 20:55, 5F

11/02 21:31, , 6F
C1=P2;C1(ind2)=x;改成C1=zeros(1,6);C1(ind)=P2(ind);
11/02 21:31, 6F

11/02 21:32, , 7F
C1(C1==0)=P1(sort(ind2));
11/02 21:32, 7F

11/03 02:37, , 8F
感謝兩位提供的方法 已經成功解決了~
11/03 02:37, 8F
文章代碼(AID): #1O4sMNBb (MATLAB)
文章代碼(AID): #1O4sMNBb (MATLAB)