File src/salesman/algorithms/SimAnn.java changed (mode: 100644) (index 3c13013..f1aaf37) |
... |
... |
public class SimAnn extends Thread { |
14 |
14 |
private Order currentOrder = Order.getRandomOrder(MainWindowController.data.getCitiesSize()); |
private Order currentOrder = Order.getRandomOrder(MainWindowController.data.getCitiesSize()); |
15 |
15 |
private Random r = new Random(); |
private Random r = new Random(); |
16 |
16 |
private int bestLength =currentOrder.getTotalLength(MainWindowController.data.getCities()),cancel=0; |
private int bestLength =currentOrder.getTotalLength(MainWindowController.data.getCities()),cancel=0; |
17 |
|
private double sigma = 1000000; |
|
|
17 |
|
private double sigma = 1000000*currentOrder.getSize(); |
18 |
18 |
|
|
19 |
19 |
@Override |
@Override |
20 |
20 |
public void run(){ |
public void run(){ |
|
... |
... |
public class SimAnn extends Thread { |
29 |
29 |
MainWindowController.data.setAlgorithmRunning(false); |
MainWindowController.data.setAlgorithmRunning(false); |
30 |
30 |
return; |
return; |
31 |
31 |
} |
} |
32 |
|
double test = (new Double(1)/(currentOrder.getSize()*currentOrder.getSize())); |
|
|
32 |
|
double test = (1d /(currentOrder.getSize()*currentOrder.getSize())); |
33 |
33 |
sigma-= sigma*test; |
sigma-= sigma*test; |
34 |
|
System.out.println("Sigma: "+sigma); |
|
|
34 |
|
// System.out.println("Sigma: "+sigma); |
35 |
35 |
int a = r.nextInt(currentOrder.getSize()); |
int a = r.nextInt(currentOrder.getSize()); |
36 |
36 |
int b = r.nextInt(currentOrder.getSize()); |
int b = r.nextInt(currentOrder.getSize()); |
37 |
37 |
|
|
|
... |
... |
public class SimAnn extends Thread { |
39 |
39 |
currentOrder.swapValues(a, b); |
currentOrder.swapValues(a, b); |
40 |
40 |
|
|
41 |
41 |
int length = currentOrder.getTotalLength(MainWindowController.data.getCities()); |
int length = currentOrder.getTotalLength(MainWindowController.data.getCities()); |
42 |
|
System.out.println(bestLength-length); |
|
43 |
42 |
if (length< bestLength) { |
if (length< bestLength) { |
44 |
43 |
MainWindowController.data.setBestEver(currentOrder.copy()); |
MainWindowController.data.setBestEver(currentOrder.copy()); |
45 |
44 |
MainWindowController.data.getCurrentOrder().setOrder(currentOrder.getOrder()); |
MainWindowController.data.getCurrentOrder().setOrder(currentOrder.getOrder()); |
46 |
|
System.out.println("Hi"); |
|
|
45 |
|
//System.out.println("Hi"); |
47 |
46 |
bestLength=length; |
bestLength=length; |
48 |
47 |
} else { |
} else { |
49 |
48 |
double dif = length-bestLength; |
double dif = length-bestLength; |
50 |
49 |
double result = Math.exp(-dif/sigma); |
double result = Math.exp(-dif/sigma); |
51 |
|
if(!(result>Math.random())){ |
|
|
50 |
|
double d = Math.random(); |
|
51 |
|
System.out.println(result+","+d); |
|
52 |
|
if(!(result>d)){ |
52 |
53 |
currentOrder.swapValues(a,b); |
currentOrder.swapValues(a,b); |
53 |
54 |
cancel++; |
cancel++; |
54 |
55 |
}else{ |
}else{ |
|
... |
... |
public class SimAnn extends Thread { |
68 |
69 |
if(sigma<1){ |
if(sigma<1){ |
69 |
70 |
running=false; |
running=false; |
70 |
71 |
} |
} |
71 |
|
/* if(cancel>40){ |
|
|
72 |
|
if(cancel>40){ |
72 |
73 |
running=false; |
running=false; |
73 |
|
}*/ |
|
|
74 |
|
} |
74 |
75 |
|
|
75 |
76 |
} |
} |
76 |
77 |
DateTime end = new DateTime(); |
DateTime end = new DateTime(); |
File src/salesman/ui/MenuController/SimAnController.java changed (mode: 100644) (index f360f39..87d75d4) |
... |
... |
package salesman.ui.MenuController; |
2 |
2 |
|
|
3 |
3 |
import javafx.fxml.FXML; |
import javafx.fxml.FXML; |
4 |
4 |
import javafx.scene.control.ProgressBar; |
import javafx.scene.control.ProgressBar; |
5 |
|
import salesman.algorithms.Opt2; |
|
6 |
5 |
import salesman.algorithms.SimAnn; |
import salesman.algorithms.SimAnn; |
|
6 |
|
import salesman.ui.MainWindowController; |
|
7 |
|
|
7 |
8 |
|
|
8 |
9 |
public class SimAnController { |
public class SimAnController { |
9 |
10 |
private SimAnn currentlyRunning; |
private SimAnn currentlyRunning; |
|
... |
... |
public class SimAnController { |
12 |
13 |
|
|
13 |
14 |
@FXML |
@FXML |
14 |
15 |
private void onAction(){ |
private void onAction(){ |
15 |
|
currentlyRunning= new SimAnn(); |
|
16 |
|
currentlyRunning.setDaemon(true); |
|
17 |
|
currentlyRunning.start(); |
|
|
16 |
|
if(!MainWindowController.data.isAlgorithmRunning()) { |
|
17 |
|
currentlyRunning = new SimAnn(); |
|
18 |
|
currentlyRunning.setDaemon(true); |
|
19 |
|
currentlyRunning.start(); |
|
20 |
|
} |
18 |
21 |
} |
} |
19 |
22 |
@FXML |
@FXML |
20 |
23 |
private void cancel(){ |
private void cancel(){ |