示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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();
        }
示例#4
0
 public SolverProcess(Skrzyzowanie skrzyzowanie)
 {
     this.intancjaSkrzyzowania = skrzyzowanie;
 }