static private void simulatedAnnealing(double T, double deltaT)
        {
            new_network = new Model.Network(network);
            while (T > 0)
            {
                new_network.resetEdges();
                foreach (Model.Demand d in new_network.Demands)
                {
                    generateRandomPath(d);
                    d.flow();
                }


                double min_price = network.Price();
                if (network.Price() == 0)
                {
                    min_price = double.MaxValue;
                }
                double ap = acceptanceProbability(new_network.Price(), min_price, T);

                if (new_network.Price() < min_price || ap > generator.NextDouble())
                {
                    Model.Network tmp = network;
                    network     = new_network;
                    new_network = tmp;
                }
                Console.Write("\rMinimalna cena sieci: " + network.Price() + "                 ");
                T -= deltaT;
            }
        }
        static private void initialize(string path)
        {
            network = new Model.Network();

            using (StreamReader streamReader = new StreamReader(path))
            {
                List<string> textFile = new List<string>();

                while (streamReader.EndOfStream == false)
                {
                    string line = streamReader.ReadLine();

                    if (!line.Contains("#") && line != "")
                    {
                        textFile.Add(line);
                    }
                }
                network.load(textFile);
            }
        }
        static private void initialize(string path)
        {
            network = new Model.Network();

            using (StreamReader streamReader = new StreamReader(path))
            {
                List <string> textFile = new List <string>();

                while (streamReader.EndOfStream == false)
                {
                    string line = streamReader.ReadLine();

                    if (!line.Contains("#") && line != "")
                    {
                        textFile.Add(line);
                    }
                }
                network.load(textFile);
            }
        }
        public Network(Network source)
        {
            this.vertices = new Vertex[source.vertices.Length];
            for (int i = 0; i < source.vertices.Length; i++)
            {
                this.vertices[i] = new Vertex(i + 1);
            }
            this.edges = new Edge[source.edges.Length];
            for (int i = 0; i < source.edges.Length; i++)
            {
                Edge e = source.edges[i];
                this.edges[i] = new Edge(e.Id, this.vertices[e.Begin.Id - 1], this.vertices[e.End.Id - 1], e.Module.Capacity, e.Module.Price);
                this.edges[i].Begin.addEdgeOut(this.edges[i]);
            }

            this.demands = new Demand[source.demands.Length];
            for (int i = 0; i < source.demands.Length; i++)
            {
                Demand c = source.demands[i];
                this.demands[i] = new Demand(c.Id, this.vertices[c.Begin.Id - 1], this.vertices[c.End.Id - 1], c.Capacity);
            }
        }
        static private void simulatedAnnealing(double T, double deltaT)
        {
            new_network = new Model.Network(network);
            while(T>0)
            {
                new_network.resetEdges();
                foreach (Model.Demand d in new_network.Demands)
                {
                    generateRandomPath(d);
                    d.flow();
                }


                double min_price = network.Price();
                if (network.Price() == 0)
                {
                    min_price = double.MaxValue;
                }
                double ap = acceptanceProbability(new_network.Price(), min_price, T);
                
                if (new_network.Price() < min_price || ap > generator.NextDouble())
                {
                    Model.Network tmp = network;
                    network = new_network;
                    new_network = tmp;
                }
                Console.Write("\rMinimalna cena sieci: " + network.Price() + "                 ");
                T -= deltaT;
            }
            
        }