Created
May 27, 2018 12:29
-
-
Save yasincidem/46640cdba3c41627114d37d38887d7d2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package edu.anadolu; | |
import java.util.ArrayList; | |
import java.util.Collections; | |
import java.util.List; | |
import java.util.Random; | |
import java.util.stream.Collectors; | |
/** | |
* Created by yasin_000 on 26.5.2018. | |
*/ | |
class Solution { | |
private static int swapHubWithNodeInRoute = 0; | |
private static int insertNodeBetweenRoutes = 0; | |
private static int swapNodesInRoute = 0; | |
private static int swapNodesBetweenRoutes = 0; | |
private static int insertNodeInRoute = 0; | |
private static final Random rand = new Random(); | |
private List<Integer> depots; | |
private List<List<Integer>> routes; | |
private int cost = 0; | |
Solution(List<Integer> depots, List<List<Integer>> routes) { | |
this.depots = depots; | |
this.routes = routes; | |
} | |
Solution(Solution solution) { | |
depots = solution.depots; | |
routes = solution.routes; | |
} | |
void swapNodesInRoute() { | |
final int i = rand.nextInt(routes.size()); | |
System.out.println("routes size: " + routes.size()); | |
System.out.println("i: " + i); | |
System.out.println("current route size : " + routes.get(i).size()); | |
System.out.println(routes.get(i)); | |
final List<Integer> collect = rand.ints(1, routes.get(i).size() -1 ) | |
.distinct() | |
.limit(2) | |
.boxed() | |
.collect(Collectors.toList()); | |
System.out.println("Random nodes: "); | |
System.out.println(collect); | |
Collections.swap(routes.get(i), collect.get(0), collect.get(1)); | |
swapNodesInRoute++; | |
} | |
void swapHubWithNodeInRoute() { | |
final List<Integer> collect = rand.ints(0, depots.size()) | |
.distinct() | |
.limit(2) | |
.boxed() | |
.collect(Collectors.toList()); | |
Collections.swap(depots, collect.get(0), collect.get(1)); | |
List<Integer> first = new ArrayList<>(); | |
List<Integer> second = new ArrayList<>(); | |
for (int j = 0; j < routes.size(); j++) { | |
if (routes.get(j).get(0) == depots.get(collect.get(0)) ) { | |
first.add(j); | |
} | |
if (routes.get(j).get(0) == depots.get(collect.get(1))) { | |
second.add(j); | |
} | |
} | |
for (int i = 0; i < first.size(); i++) { | |
routes.get(first.get(i)).set(0, depots.get(collect.get(1))); | |
routes.get(first.get(i)).set(routes.get(first.get(i)).size() - 1, depots.get(collect.get(1))); | |
routes.get(second.get(i)).set(0, depots.get(collect.get(0))); | |
routes.get(second.get(i)).set(routes.get(second.get(i)).size() - 1, depots.get(collect.get(0))); | |
} | |
System.out.println(first); | |
System.out.println(second); | |
// for (final List<Integer> list : routes) { | |
// for (int j = 0; j < list.size() - 1; j++) { | |
// cost += distance[list.get(j)][list.get(j + 1)]; | |
// } | |
// } | |
// | |
// System.out.println("**Total cost is " + cost); | |
swapHubWithNodeInRoute++; | |
} | |
void swapNodesBetweenRoutes() { | |
final List<Integer> collect = rand.ints(0, routes.size()) | |
.distinct() | |
.limit(2) | |
.boxed() | |
.collect(Collectors.toList()); | |
int first = rand.nextInt(routes.get(collect.get(0)).size() - 1 - 1) + 1; | |
int second = rand.nextInt(routes.get(collect.get(1)).size() - 1 - 1) + 1; | |
System.out.println(first); | |
System.out.println(second); | |
int felem = routes.get(collect.get(0)).get(first); | |
int selem = routes.get(collect.get(1)).get(second); | |
System.out.println(); | |
System.out.println(felem); | |
System.out.println(selem); | |
routes.get(collect.get(0)).set(first, selem); | |
routes.get(collect.get(1)).set(second, felem); | |
swapNodesBetweenRoutes++; | |
} | |
void insertNodeInRoute() { | |
final int i = rand.nextInt(routes.size()); | |
System.out.println("routes size: " + routes.size()); | |
System.out.println("i: " + i); | |
System.out.println("current route size : " + routes.get(i).size()); | |
System.out.println(routes.get(i)); | |
final List<Integer> collect = rand.ints(1, routes.get(i).size() - 2 ) | |
.distinct() | |
.limit(2) | |
.boxed() | |
.collect(Collectors.toList()); | |
System.out.println("Random nodes: "); | |
System.out.println(collect); | |
Integer elemWillRemove = routes.get(i).get(collect.get(0)); | |
Integer second = routes.get(i).get(collect.get(1)); | |
System.out.println("elemWillRemove" + elemWillRemove); | |
routes.get(i).remove(elemWillRemove); | |
routes.get(i).add((collect.get(1)) , elemWillRemove); | |
insertNodeInRoute++; | |
} | |
void insertNodeBetweenRoutes() { | |
final List<Integer> collect = rand.ints(0, routes.size()) | |
.distinct() | |
.limit(2) | |
.boxed() | |
.collect(Collectors.toList()); | |
int first = rand.nextInt(routes.get(collect.get(0)).size() - 1 - 1) + 1; | |
int second = rand.nextInt(routes.get(collect.get(1)).size() - 1 - 1) + 1; | |
System.out.println(first); | |
System.out.println(second); | |
int felem = routes.get(collect.get(0)).get(first); | |
int selem = routes.get(collect.get(1)).get(second); | |
System.out.println(); | |
System.out.println(felem); | |
System.out.println(selem); | |
routes.get(collect.get(0)).set(first, selem); | |
routes.get(collect.get(1)).set(second, felem); | |
Integer elemWillRemove = routes.get(collect.get(0)).get(collect.get(0)); | |
System.out.println("elemWillRemove" + elemWillRemove); | |
// routes.get(collect.get(0)).remove(elemWillRemove); | |
routes.get(collect.get(1)).add(first + 1, elemWillRemove); | |
insertNodeBetweenRoutes++; | |
} | |
void print(int numSalesmen) { | |
System.out.println("Depots"); | |
System.out.println(depots); | |
System.out.println("Routes"); | |
for (List<Integer> route : routes) { | |
System.out.println(route); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment