public Skrzyzowanie copy() { Skrzyzowanie s = new Skrzyzowanie(); ArrayList listaPasow = new ArrayList(); Dictionary <String, List <Pas> > dictionary = new Dictionary <String, List <Pas> >(); foreach (Pas pas in this.wszystkiePasy) { listaPasow.Add(pas.copy()); } s.setPasy(listaPasow); object[] pasy = (listaPasow.GetRange(0, 3).ToArray()); dictionary.Add("N", new List <Pas> { (Pas)pasy[0], (Pas)pasy[1], (Pas)pasy[2] }); pasy = (listaPasow.GetRange(3, 3).ToArray()); dictionary.Add("E", new List <Pas> { (Pas)pasy[0], (Pas)pasy[1], (Pas)pasy[2] }); pasy = (listaPasow.GetRange(6, 3).ToArray()); dictionary.Add("W", new List <Pas> { (Pas)pasy[0], (Pas)pasy[1], (Pas)pasy[2] }); pasy = (listaPasow.GetRange(9, 3).ToArray()); dictionary.Add("S", new List <Pas> { (Pas)pasy[0], (Pas)pasy[1], (Pas)pasy[2] }); return(s); }
public SolverProcess solveSkrzyzowanie(Skrzyzowanie skrzyzowanie) { int lightChanges = 0; SwiatlaGenerator sw = new SwiatlaGenerator(); Walidator walidator = new Walidator(); SolverProcess process = new SolverProcess(skrzyzowanie); for (int i = 0; i < wektor.Length; i++) { wektor[i] = true; } while (!skrzyzowanie.isEmpty()) { bool[] nextSwiatlaState = sw.generateNextVec(12); // nextSwiatlaState = wywalNiepotrzebneOtware(nextSwiatlaState); while (!walidator.walidacja(nextSwiatlaState)) { nextSwiatlaState = sw.generateBasingOnPrevious(wektor); // nextSwiatlaState = wywalNiepotrzebneOtware(nextSwiatlaState); } Tuple <int, int, int> modificationValues = skrzyzowanie.modifyState(nextSwiatlaState); process.addStep(new SolverStep(nextSwiatlaState, modificationValues)); lightChanges++; zmienWektor(nextSwiatlaState); } return(process); }
static void Main() { Lotto.seeduj(); Application.EnableVisualStyles(); GeneratorSkrzyzowania gs = new GeneratorSkrzyzowania(); Skrzyzowanie s = gs.generujSkrzyzowanie(5, 10, 10, 5, 3); Skrzyzowanie deepCopy = s.copy(); SkrzyzowanieSolver solver = new SkrzyzowanieSolver(); for (int i = 0; i < 10; i++) { int begin = Environment.TickCount; SolverProcess process = solver.solveSkrzyzowanie(s.copy()); int delta = Environment.TickCount - begin; System.Console.WriteLine("Solving lasted:" + delta + " value of process:" + process.getProcessValue()); } StreamWriter sw = new StreamWriter(Environment.TickCount.ToString() + ".csv"); sw.Write("Liczba prob rozwiazania\tNajlepsze rozwiazanie\tIlosc zmian swiatel\tCzas rozwiazywania\n"); Skrzyzowanie instancjaSkrzyzowania = gs.generujSkrzyzowanie(4, 20, 5, 3, 2); SolverProcess best = solver.solveSkrzyzowanie(instancjaSkrzyzowania.copy()); for (int solvingTries = 1000; solvingTries < 10000100; solvingTries += 200000) { float bestValue = float.MinValue; SolverProcess process = null; int begining = Environment.TickCount; int delta = 0; long deltasum = 0; for (int i = 0; i < solvingTries; i++) { Skrzyzowanie instancjaSkrzyzowaniaCopy = instancjaSkrzyzowania.copy(); begining = Environment.TickCount; // poczatek liczenia naszego skrzyzowania process = solver.solveSkrzyzowanie(instancjaSkrzyzowaniaCopy); delta = Environment.TickCount - begining; // koniec liczenia rozwiazania pojedynczego float actual = process.getProcessValue(); if (actual > bestValue) { bestValue = actual; best = process; } deltasum += delta; // zsumowanie czasu np 1000 prob rozwiazania tej samej instancji } System.Console.WriteLine(solvingTries + "\t" + bestValue + "\t" + best.getSingalChangesCount() + "\t" + deltasum + "\n"); sw.Write(solvingTries + "\t" + bestValue + "\t" + best.getSingalChangesCount() + "\t" + deltasum + "\n"); } sw.Close(); }
public SolverProcess(Skrzyzowanie skrzyzowanie) { this.intancjaSkrzyzowania = skrzyzowanie; }