2016-11-06 3 views
-2

TSP 유전 알고리즘을 연구하려고합니다. 나는 GA에 처음 왔고 그것에 대해 많은 문서를 읽었습니다. 초기화를 만들고 각 개인의 적합성을 확인한 다음 돌연변이 등을 수행해야합니다. 그러나, 나는 자바 프로그래밍을 처음 접했습니다. 나는 초기화를 만드는 방법을 모르겠다 (반복없이 모든 유효한 투어에 모든 개체를 초기화한다). P. 일부 리소스 코드 및 튜토리얼 온라인은 나에게 너무 어렵다.JAVA 유전자 알고리즘 초기화

그게 내가 지금까지 얻은 것입니다. 제게 무엇이 필요하며 무엇을 잘못했는지 그리고 코드에 추가해야 할 것이 무엇인지 지적하십시오.

private void initialize(){ 

for(int i =0; i< population.length; i++){ 


    for(int j =0; j < population[i].length; j++){ 

    } 
} 
+0

왜 부울인가? 어떻게 그 개인을 소개하고 있습니까? – ItamarG3

+0

귀하의 질문에 답하기에는 너무 일반적입니다. 유전 알고리즘은 알고리즘의 한 종류이며, 모든 알고리즘을 초기화하는 단일 방법은 없습니다. –

+0

내가 초기화에 넣어야하는 것이 아니라면 –

답변

1

귀하의 질문은 일반적으로 유전 알고리즘과 관련이 없으며 Java에서 순열 집합을 초기화하는 것과 관련이 있습니다.

일반적으로 TSP에 대한 답변은 방문 할 도시 목록으로 인코딩됩니다. 따라서 4 개 도시의 경우 [0, 1, 2, 3]과 같이 표시 될 수 있습니다. 첫 번째 방문, 두 번째 방문, 세 번째 방문, 네 번째 방문을 의미합니다. 모든 유효한 대답은이 기본 대답의 순열입니다.. 왕복 여행에 관심이 있다면 (마침내 마지막 도시에서 첫 번째 도시로 이동하는 경우), 마지막 N-1 요소를 섞어서 일부 대칭을 피할 수 있습니다.

하자 프로그램 자바 간단한 순열 방법 :

// initialize an ArrayList of n integers, from 0 to N-1 
ArrayList<Integer> base = new ArrayList<>(); 
for (int i=0; i<n; i++) base.add(i); 

// initialize each answer to a permutation of the base answer 
Random r = new Random(); // use a seed if you want repeatable runs 
for (Individual p : population) { 
    int[] perm = new int[base.size()]; 
    Collections.shuffle(base, r); 
    base.toArray(perm); 
    p.setAnswer(perm); 
} 

내가 대신 int의 2 차원 배열, 즉 가정하고, 당신은 대답뿐만 아니라 체력과 다른뿐만 아니라 포함 된 실제 Individual 객체를 사용 속성.

관련 문제