Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save yasincidem/46640cdba3c41627114d37d38887d7d2 to your computer and use it in GitHub Desktop.
Save yasincidem/46640cdba3c41627114d37d38887d7d2 to your computer and use it in GitHub Desktop.
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