2017-03-11 6 views
1

유전자 알고리즘을 위해 Java에서 Uniform Crossover 메서드를 구현하는 방법은 무엇입니까?Java의 유전자 알고리즘에 대한 균일 크로스 오버

현재 프로그램을 계속하기 전에 상호 연결해야하는 2 개의 ArrayList를 사용하고 있습니다. 아래는 내가 사용 된 방법의 시작이다 : 나는 순간에 서

private void UniformCrossOver(int ListOne,int ListTwo) 
{ 
... 
} 

, 나는 내가으로 데이터 분할을해야합니다 다른 두 ArrayLists을해야한다는 가정입니다하지만 나도 몰라 크로스 오버로 어디에서 시작해야할까요? 나는 새로운 루프의 크기를 정의 키로 for 루프를 사용할 것인가?

도움을 주시면 감사하겠습니다.

+0

http://stackoverflow.com/questions/9318881/uniform-crossover-in-java –

+0

결과를 저장하려면 하나의'ArrayList'가 필요합니다. 각 점에서, 두 개의 입력 ArrayLists 중 하나의 요소를 무작위로 0.5 확률로 선택합니다. 난수 생성기를 사용하여 0과 1 사이에서 선택할 수 있습니다 (예 :'Random :: nextInt (0,2)'). 결과 arrayList에 결과 요소를 저장합니다. –

+0

확인. 그래서'ArrayList'의 각 요소에 대해 실행되는'for' 루프를 증가시켜야합니다. 즉, 난수 생성기는 새로운 노드가 부모 A 또는 부모 B에서 가져온 것인지 여부를 결정하는 불확실성의 요소입니까? –

답변

0

크로스 오버 후 부모가 필요하지 않은 경우 새 배열 목록을 작성할 필요가 없습니다. 이 작업을해야 한 당신의 염색체가

public void uniformCrossover(ArrayList<Integer> a, ArrayList<Integer> b){ 
    for (int i = 0; i <a.size(); i++) { 
     if(Math.random() < crossoverProbability){ 
      int tmp = a.get(i); 
      a.set(i, b.get(i)); 
      b.set(i, tmp); 
     } 
    } 
} 
0

당신은이 배열을 사용하여 만들 수 있습니다 동일한 크기의

//Some example chromosomes 
int[] chromosomeA = {1, 1, 0, 1}; 
Int[] chromosomeB = {1, 0, 0, 0}; 

    for(int i = 0; i < chromosomeA.length; i++){ 
     int a = chromosomeA[i]; 
     if(new Random().nextInt(2) == 0){ 
     chromosomeA[i] = chromosomeB[i]; 
     chromosomeB[i] = a; 
     } 
    }