Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // entscheidet sich für eine Kante mit Hilfe der gegebenen Formel für P
- // jedoch nie eine Kante oder Knoten doppelt
- public Edge makeDecision(List<Edge> edges) {
- Map<Edge, Double> listZaehler = new HashMap<Edge, Double>();
- Map<Edge, Double> listFormel = new HashMap<Edge, Double>();
- double summe = 0;
- Random r = new Random();
- int rand = r.nextInt(101);
- // tau * eta von r
- for(Edge edge : edges){
- Double tmp = 0.0;
- tmp = ((double) edge.getWeight() / (double) edge.getPheromon());
- listZaehler.put(edge, tmp);
- }
- // Summe (tau * eta) von u
- for(Map.Entry<Edge, Double> elem : listZaehler.entrySet()){
- summe += elem.getValue();
- }
- // Den kleinsten aus (( tau * eta (von r)) / ( tau * eta (von u)))
- for(Map.Entry<Edge, Double> elem : listZaehler.entrySet()){
- listFormel.put(elem.getKey(), (double) ((elem.getValue()) / (summe)) );
- }
- double low = 0;
- double high;
- for(Map.Entry<Edge, Double> elem : listFormel.entrySet()){
- high = elem.getValue()*100;
- if (rand >= low && rand < (high + low))
- {
- // Benutze Kante speichern
- visitedEdge.add(elem.getKey());
- // Benutze Vertex speichern
- // Damit der nächste Vertex verwendent wird, die if-else Schleife
- if(visitedVertex.contains(elem.getKey().getSource())){
- visitedVertex.add(elem.getKey().getTarget());
- } else {
- visitedVertex.add(elem.getKey().getSource());
- }
- // Gibt die Kante wieder
- return elem.getKey();
- }
- else
- {
- low += high;
- }
- }
- // Wenn keine Edge übergeben wurde wird Null zurück gegeben
- return null;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement