0

나는 간단한 힐 클라이밍 알고리즘을 사용하여 여행 세일즈맨 문제를 해결하려고합니다. 나는 이것을하기 위해 자바 프로그램을 만들고 싶다. 나는 그것을 사용하는 것이 가장 좋은 일을하지 알고 있지만 주로는 결과를보고 한 후 나는 또한 생성됩니다 다음과 결과를 비교하려면 :간단한 언덕 등반 알고리즘?

  • 확률 힐 산악인
  • 랜덤 다시 시작 힐 산악인
  • Simulated Annealing.

어쨌든 다시 간단한 언덕 등반 알고리즘에 이미이 있습니다

import java.util.*; 
public class HCSA 
{ 
    static private Random rand; 
    static public void main(String args[]) 
    { 
     for(int i=0;i<10;++i) System.out.println(UR(3,4)); 
    } 
    static public double UR(double a,double b) 
    { 
     if (rand == null) 
     { 
      rand = new Random(); 
      rand.setSeed(System.nanoTime()); 
     } 
     return((b-a)*rand.nextDouble()+a); 
    } 
} 

이 내가 필요한 모든인가? 이 코드가 맞습니까? 텍스트 문서에는 프로그램에서 읽고 결과를 생성 할 수 있도록 다양한 데이터 세트가 있습니다.

정말 도움이 되시길 바랍니다. ... 여기 내가 가지고있는 코드입니다

----- 편집 ----

내가 바보 인되었고, 내가 먼저 메모장을 열어해야 할 때 자바 이클립스로 바로 파일을 연 됐어.

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.Reader; 
import java.io.StreamTokenizer; 
import java.util.ArrayList; 

{ 
    //Print a 2D double array to the console Window 
    static public void PrintArray(double x[][]) 
    { 
     for(int i=0;i<x.length;++i) 
     { 
      for(int j=0;j<x[i].length;++j) 
      { 
       System.out.print(x[i][j]); 
       System.out.print(" "); 
      } 
      System.out.println(); 
     } 
    } 
    //reads in a text file and parses all of the numbers in it 
    //is for reading in a square 2D numeric array from a text file 
    //This code is not very good and can be improved! 
    //But it should work!!! 
    //'sep' is the separator between columns 
    static public double[][] ReadArrayFile(String filename,String sep) 
    { 
     double res[][] = null; 
     try 
     { 
      BufferedReader input = null; 
      input = new BufferedReader(new FileReader(filename)); 
      String line = null; 
      int ncol = 0; 
      int nrow = 0; 

      while ((line = input.readLine()) != null) 
      { 
       ++nrow; 
       String[] columns = line.split(sep); 
       ncol = Math.max(ncol,columns.length); 
      } 
      res = new double[nrow][ncol]; 
      input = new BufferedReader(new FileReader(filename)); 
      int i=0,j=0; 
      while ((line = input.readLine()) != null) 
      { 

       String[] columns = line.split(sep); 
       for(j=0;j<columns.length;++j) 
       { 
        res[i][j] = Double.parseDouble(columns[j]); 
       } 
       ++i; 
      } 
     } 
     catch(Exception E) 
     { 
      System.out.println("+++ReadArrayFile: "+E.getMessage()); 
     } 
     return(res); 
    } 
    //This method reads in a text file and parses all of the numbers in it 
    //This code is not very good and can be improved! 
    //But it should work!!! 
    //It takes in as input a string filename and returns an array list of Integers 
    static public ArrayList<Integer> ReadIntegerFile(String filename) 
    { 
     ArrayList<Integer> res = new ArrayList<Integer>(); 
     Reader r; 
     try 
     { 
      r = new BufferedReader(new FileReader(filename)); 
      StreamTokenizer stok = new StreamTokenizer(r); 
      stok.parseNumbers(); 
      stok.nextToken(); 
      while (stok.ttype != StreamTokenizer.TT_EOF) 
      { 
       if (stok.ttype == StreamTokenizer.TT_NUMBER) 
       { 
        res.add((int)(stok.nval)); 
       } 
       stok.nextToken(); 
      } 
     } 
     catch(Exception E) 
     { 
      System.out.println("+++ReadIntegerFile: "+E.getMessage()); 
     } 
     return(res); 
    } 
} 
+0

입니다. _ "이 코드가 맞습니까?" 나는 어떤 등반 알고리즘도 보지 못했다. 또한'main()'내부에서'rand'를 초기화하고'UR()'내부에서 테스트를 제거 할 것입니다. –

+0

등산 알고리즘을 사용하여 몇 가지 데이터 세트를 살펴 보았습니다. 데이터 세트는 여행 거리입니다. 내가 그랬다고 생각했던 것과는 다른 것처럼 보입니다. 조금 혼란스러워. 다른 조언을 주셔서 감사합니다. –

+0

배열 (도시 거리 파일) 읽기, 배열 인쇄 및 둘러보기 파일 (정수 목록 파일) 읽기에 대한 "TSP Java 클래스의 세 가지 메소드"위에 게시 된 Java 스 니펫에 대한 설명을 찾았습니다. 내가 놓친 게 있니? –

답변

2

붙여 넣은 코드와 Traveling Salesman의 관계가 확실하지 않습니다. [a,b) 간격으로 임의의 숫자를 생성하는 함수 UR이 있습니다.

+0

오. 그런데 그것은 실망 스럽다. 나는 지금 완전히 혼란스러워. 나는 그 코드가 순간에 세트 번호를 사용하고 (3,4), 필요한 모든 것은 그것을 변경하여 데이터 세트를 읽는다는 인상을 받았다. –

+0

좋아, 그냥 위의 자바 스 니펫에 대한 설명을 발견 : 배열 (도시 거리 파일) 읽기, 배열 인쇄 및 투어 파일 (정수 목록 파일)에서 읽기위한 "TSP 자바 클래스의 세 가지 방법은, " –

3

당신은 교과서
"Artificial Intelligence a Modern Approach"에 대한 코드 저장소에 대한 결과를 비교할 수 있습니다, 여기에 aima code repository입니다.
힐 클라이밍 구현은 HillClimbingSearch.java

+0

어떻게이 프로그램을 실행할 수 있습니까! 이 소스 코드를 실행하는 데 필요한 자습서가 있습니다. –

+0

자습서는이 코드가 포함 된 교과서, http://aima.cs.berkeley.edu/에서 교과서 홈 페이지 – crowne

+0

에 감사드립니다. Crowne ... 이미 실행했습니다 :) –