File src/salesman/algorithms/Opt2.java changed (mode: 100644) (index f39b24d..c5ebabf) |
... |
... |
public class Opt2 extends Thread { |
15 |
15 |
@Override |
@Override |
16 |
16 |
|
|
17 |
17 |
public void run() { |
public void run() { |
|
18 |
|
|
18 |
19 |
MainWindowController.data.setAlgorithmRunning(true); |
MainWindowController.data.setAlgorithmRunning(true); |
19 |
20 |
int count = 0; |
int count = 0; |
20 |
|
int concelCondition= MainWindowController.data.getCities().length*10; |
|
|
21 |
|
double cancelCondition= MainWindowController.data.getCities().length*MainWindowController.data.getCities().length-1; |
21 |
22 |
currentOrder = Order.getRandomOrder(MainWindowController.data.getCities()); |
currentOrder = Order.getRandomOrder(MainWindowController.data.getCities()); |
22 |
|
while (count<concelCondition) { |
|
|
23 |
|
while (count<cancelCondition) { |
23 |
24 |
if(isInterrupted()){ |
if(isInterrupted()){ |
24 |
25 |
MainWindowController.data.setAlgorithmRunning(false); |
MainWindowController.data.setAlgorithmRunning(false); |
25 |
26 |
return; |
return; |
|
... |
... |
public class Opt2 extends Thread { |
28 |
29 |
int index1 = r.nextInt(currentOrder.getSize()), index2 = r.nextInt(currentOrder.getSize()); |
int index1 = r.nextInt(currentOrder.getSize()), index2 = r.nextInt(currentOrder.getSize()); |
29 |
30 |
currentOrder.swapValues(index1, index2); |
currentOrder.swapValues(index1, index2); |
30 |
31 |
MainWindowController.data.getCurrentOrder().setOrder(currentOrder.getOrder()); |
MainWindowController.data.getCurrentOrder().setOrder(currentOrder.getOrder()); |
|
32 |
|
System.out.println("change: "+System.currentTimeMillis()); |
31 |
33 |
if (currentOrder.getTotalLength() < currentLength) { |
if (currentOrder.getTotalLength() < currentLength) { |
32 |
34 |
MainWindowController.data.setBestEver(currentOrder); |
MainWindowController.data.setBestEver(currentOrder); |
33 |
35 |
count =0; |
count =0; |
|
... |
... |
public class Opt2 extends Thread { |
44 |
46 |
} |
} |
45 |
47 |
} |
} |
46 |
48 |
} |
} |
|
49 |
|
MainWindowController.data.getCurrentOrder().setOrder(null); |
47 |
50 |
MainWindowController.data.setAlgorithmRunning(false); |
MainWindowController.data.setAlgorithmRunning(false); |
48 |
51 |
} |
} |
49 |
52 |
|
|
File src/salesman/ui/MainWindowController.java changed (mode: 100644) (index f6247b3..3822929) |
1 |
1 |
package salesman.ui; |
package salesman.ui; |
2 |
2 |
|
|
|
3 |
|
import javafx.application.Platform; |
3 |
4 |
import javafx.beans.value.ChangeListener; |
import javafx.beans.value.ChangeListener; |
4 |
5 |
import javafx.beans.value.ObservableValue; |
import javafx.beans.value.ObservableValue; |
5 |
6 |
import javafx.collections.FXCollections; |
import javafx.collections.FXCollections; |
|
... |
... |
public class MainWindowController { |
117 |
118 |
} |
} |
118 |
119 |
|
|
119 |
120 |
|
|
120 |
|
private class RepaintListener implements ChangeListener<Boolean> { |
|
|
121 |
|
private class RepaintListener extends Thread implements ChangeListener<Boolean> { |
|
122 |
|
boolean newValue; |
121 |
123 |
|
|
122 |
124 |
@Override |
@Override |
123 |
|
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { |
|
|
125 |
|
public void run(){ |
|
126 |
|
System.out.println("paint: "+System.currentTimeMillis()); |
124 |
127 |
int numCities = getNumOfCities(); |
int numCities = getNumOfCities(); |
125 |
128 |
Order currentOrder = data.getCurrentOrder(); |
Order currentOrder = data.getCurrentOrder(); |
126 |
129 |
if (newValue) { |
if (newValue) { |
127 |
130 |
GraphicsContext gc = canvasCities.getGraphicsContext2D(); |
GraphicsContext gc = canvasCities.getGraphicsContext2D(); |
128 |
131 |
gc.clearRect(0, 0, canvasCities.getWidth(), canvasCities.getHeight()); |
gc.clearRect(0, 0, canvasCities.getWidth(), canvasCities.getHeight()); |
129 |
|
gc.setStroke(new Color(0, 0, 0, 1)); |
|
130 |
|
gc.setLineWidth(1); |
|
131 |
|
gc.setFill((Color.GRAY)); |
|
132 |
|
for (int i = 0; i < currentOrder.getSize(); i++) { |
|
133 |
|
City current = data.getCities()[currentOrder.getValue(i)]; |
|
134 |
|
City next; |
|
135 |
|
if ((i + 1) > numCities - 1) { |
|
136 |
|
next = data.getCities()[currentOrder.getValue(0)]; |
|
137 |
|
} else { |
|
138 |
|
next = data.getCities()[currentOrder.getValue(i + 1)]; |
|
139 |
|
} |
|
140 |
|
|
|
141 |
|
|
|
142 |
|
|
|
143 |
|
gc.fillOval(current.getX() - 5, current.getY() - 5, 10, 10); |
|
144 |
|
gc.strokeLine(current.getX(), current.getY(), next.getX(), next.getY()); |
|
145 |
|
|
|
146 |
|
} |
|
147 |
|
|
|
148 |
|
if(!(data.getBestEver()==null)) { |
|
149 |
|
Order best = data.getBestEver(); |
|
150 |
|
gc.setStroke(new Color(1, 0, 0, 1)); |
|
151 |
|
gc.setLineWidth(3); |
|
|
132 |
|
if(!(currentOrder.getOrder()==null)) { |
|
133 |
|
gc.setStroke(new Color(0, 0, 0, 1)); |
|
134 |
|
gc.setLineWidth(1); |
152 |
135 |
gc.setFill((Color.GRAY)); |
gc.setFill((Color.GRAY)); |
153 |
|
for (int i = 0; i < best.getSize(); i++) { |
|
154 |
|
City current = data.getCities()[best.getValue(i)]; |
|
|
136 |
|
for (int i = 0; i < currentOrder.getSize(); i++) { |
|
137 |
|
City current = data.getCities()[currentOrder.getValue(i)]; |
155 |
138 |
City next; |
City next; |
156 |
139 |
if ((i + 1) > numCities - 1) { |
if ((i + 1) > numCities - 1) { |
157 |
|
next = data.getCities()[best.getValue(0)]; |
|
|
140 |
|
next = data.getCities()[currentOrder.getValue(0)]; |
158 |
141 |
} else { |
} else { |
159 |
|
next = data.getCities()[best.getValue(i + 1)]; |
|
|
142 |
|
next = data.getCities()[currentOrder.getValue(i + 1)]; |
160 |
143 |
} |
} |
161 |
144 |
|
|
162 |
145 |
|
|
|
... |
... |
public class MainWindowController { |
165 |
148 |
|
|
166 |
149 |
} |
} |
167 |
150 |
} |
} |
168 |
|
repaint.set(false); |
|
|
151 |
|
|
|
152 |
|
|
|
153 |
|
if (!(data.getBestEver() == null)) { |
|
154 |
|
if (!(data.getBestEver().getOrder() == null)) { |
|
155 |
|
Order best = data.getBestEver(); |
|
156 |
|
gc.setStroke(new Color(1, 0, 0, 1)); |
|
157 |
|
gc.setLineWidth(3); |
|
158 |
|
gc.setFill((Color.GRAY)); |
|
159 |
|
for (int i = 0; i < best.getSize(); i++) { |
|
160 |
|
City current = data.getCities()[best.getValue(i)]; |
|
161 |
|
City next; |
|
162 |
|
if ((i + 1) > numCities - 1) { |
|
163 |
|
next = data.getCities()[best.getValue(0)]; |
|
164 |
|
} else { |
|
165 |
|
next = data.getCities()[best.getValue(i + 1)]; |
|
166 |
|
} |
|
167 |
|
|
|
168 |
|
|
|
169 |
|
gc.fillOval(current.getX() - 5, current.getY() - 5, 10, 10); |
|
170 |
|
gc.strokeLine(current.getX(), current.getY(), next.getX(), next.getY()); |
|
171 |
|
|
|
172 |
|
} |
|
173 |
|
repaint.set(false); |
|
174 |
|
} |
|
175 |
|
} |
169 |
176 |
} |
} |
170 |
177 |
} |
} |
|
178 |
|
|
|
179 |
|
@Override |
|
180 |
|
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { |
|
181 |
|
this.newValue=newValue; |
|
182 |
|
Platform.runLater(this); |
|
183 |
|
} |
171 |
184 |
} |
} |
|
185 |
|
|
172 |
186 |
} |
} |
|
187 |
|
|