나는 간단한 힐 클라이밍 알고리즘을 사용하여 여행 세일즈맨 문제를 해결하려고합니다. 나는 이것을하기 위해 자바 프로그램을 만들고 싶다. 나는 그것을 사용하는 것이 가장 좋은 일을하지 알고 있지만 주로는 결과를보고 한 후 나는 또한 생성됩니다 다음과 결과를 비교하려면 :간단한 언덕 등반 알고리즘?
- 확률 힐 산악인
- 랜덤 다시 시작 힐 산악인 을
- 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);
}
}
입니다. _ "이 코드가 맞습니까?" 나는 어떤 등반 알고리즘도 보지 못했다. 또한'main()'내부에서'rand'를 초기화하고'UR()'내부에서 테스트를 제거 할 것입니다. –
등산 알고리즘을 사용하여 몇 가지 데이터 세트를 살펴 보았습니다. 데이터 세트는 여행 거리입니다. 내가 그랬다고 생각했던 것과는 다른 것처럼 보입니다. 조금 혼란스러워. 다른 조언을 주셔서 감사합니다. –
배열 (도시 거리 파일) 읽기, 배열 인쇄 및 둘러보기 파일 (정수 목록 파일) 읽기에 대한 "TSP Java 클래스의 세 가지 메소드"위에 게시 된 Java 스 니펫에 대한 설명을 찾았습니다. 내가 놓친 게 있니? –