예제 #1
0
        public void GenerateInitialFeasibleSolution()
        {
            //foreach (Node n in Data.NodeSet)
            //{
            //    Scheme s = new LargeScaleFrmk.CG.Scheme();
            //    foreach (Node n2 in Data.NodeSet)
            //    {
            //        if (n == n2)
            //        {
            //            s.Value.Add(n2, 1);
            //            continue;
            //        }
            //        s.Value.Add(n2, 0);
            //    }
            //    s.ID = SchemeColumnPool.Count;
            //    SchemeColumnPool.Add(s);
            //}

            Scheme s = new LargeScaleFrmk.CG.Scheme();

            foreach (Node n2 in Data.NodeSet)
            {
                s.Value.Add(n2, 1);
            }
            s.ID = SchemeColumnPool.Count;
            SchemeColumnPool.Add(s);


            //s = new LargeScaleFrmk.CG.Scheme();
            //foreach (Node n2 in Data.NodeSet)
            //{
            //    if (n2.ID == "1")
            //    {
            //        s.Value.Add(n2, 1);
            //        continue;
            //    }
            //    s.Value.Add(n2, 0);
            //}
            //s.ID = SchemeColumnPool.Count;
            //SchemeColumnPool.Add(s);



            ExtremePoint e = new ExtremePoint();

            foreach (Node n in Data.NodeSet)
            {
                e.Value.Add(n, n.Demand);
            }
            e.ID        = 0;
            e.TotalCost = 0;
            EPColumnPool.Add(e);
        }
예제 #2
0
            private bool AddColumn()
            {
                if (_grbModel_SchemeGenerateSub.ObjVal > _grbModel_FlowAssignmentSub.ObjVal)
                {
                    if (_grbModel_SchemeGenerateSub.ObjVal > 0.0000001)
                    {
                        Scheme s = new Scheme();
                        foreach (Node n in Data.NodeSet)
                        {
                            double Y = _grbModel_SchemeGenerateSub.GetVarByName("y_" + n.ID).X;

                            s.Value.Add(n, Convert.ToInt32(Y));
                        }
                        s.ID = SchemeColumnPool.Count;
                        SchemeColumnPool.Add(s);
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    if (_grbModel_FlowAssignmentSub.ObjVal > 0.0000001)
                    {
                        ExtremePoint e = new ExtremePoint();
                        foreach (Node n in Data.NodeSet)
                        {
                            double G = _grbModel_FlowAssignmentSub.GetVarByName("g_" + n.ID).X;
                            e.Value.Add(n, G);
                        }
                        foreach (Arc a in Data.ArcSet)
                        {
                            double flow = _grbModel_FlowAssignmentSub.GetVarByName("x_" + a.FromNode.ID + "_" + a.ToNode.ID).X +
                                          _grbModel_FlowAssignmentSub.GetVarByName("x_" + a.ToNode.ID + "_" + a.FromNode.ID).X;
                            e.TotalCost += flow * Data.FlowFeePerUnit;
                        }
                        e.ID = EPColumnPool.Count;
                        EPColumnPool.Add(e);
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
            }
예제 #3
0
        private bool AddColumn()
        {
            if (_grbModel_SchemeGenerateSub.ObjVal > _grbModel_FlowAssignmentSub.ObjVal)
            {
                if (_grbModel_SchemeGenerateSub.ObjVal > 0)
                {
                    Scheme s = new Scheme();
                    foreach (Node n in Data.NodeSet)
                    {
                        double Y = _grbModel_SchemeGenerateSub.GetVarByName("y_" + n.ID).X;

                        s.Value.Add(n, Convert.ToInt32(Y));
                    }
                    s.ID = SchemeColumnPool.Count;
                    SchemeColumnPool.Add(s);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                if (_grbModel_FlowAssignmentSub.ObjVal > 0)
                {
                    foreach (Node n in Data.NodeSet)
                    {
                        ExtremePoint e = new ExtremePoint();
                        double       G = _grbModel_FlowAssignmentSub.GetVarByName("g_" + n.ID).X;
                        e.Value.Add(n, G);
                    }
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
예제 #4
0
            public bool GenerateInitialFeasibleSolution()
            {
                //foreach (Node n in Data.NodeSet)
                //{
                //    Scheme s = new LargeScaleFrmk.CG.Scheme();
                //    foreach (Node n2 in Data.NodeSet)
                //    {
                //        if (n == n2)
                //        {
                //            s.Value.Add(n2, 1);
                //            continue;
                //        }
                //        s.Value.Add(n2, 0);
                //    }
                //    s.ID = SchemeColumnPool.Count;
                //    SchemeColumnPool.Add(s);
                //}

                Scheme s = new LargeScaleFrmk.CG.Scheme();

                foreach (Node n2 in Data.NodeSet)
                {
                    if (CurrentBranchNode.ConstrPool.ContainsKey(n2))
                    {
                        s.Value.Add(n2, Convert.ToInt32(CurrentBranchNode.ConstrPool[n2]));
                    }
                    else
                    {
                        s.Value.Add(n2, 1);
                    }
                }
                s.ID = SchemeColumnPool.Count;
                SchemeColumnPool.Add(s);


                //s = new LargeScaleFrmk.CG.Scheme();
                //foreach (Node n2 in Data.NodeSet)
                //{
                //    if (n2.ID == "1")
                //    {
                //        s.Value.Add(n2, 1);
                //        continue;
                //    }
                //    s.Value.Add(n2, 0);
                //}
                //s.ID = SchemeColumnPool.Count;
                //SchemeColumnPool.Add(s);


                _env_FlowAssignmentSub      = new GRBEnv();
                _grbModel_FlowAssignmentSub = new GRBModel(_env_FlowAssignmentSub);

                BuildVar_FA();
                //BuildObj_FA();
                BuildConst_FA();

                _grbModel_FlowAssignmentSub.Write("FASub.lp");

                _grbModel_FlowAssignmentSub.Optimize();

                if (_grbModel_FlowAssignmentSub.Status == GRB.Status.INFEASIBLE)
                {
                    _grbModel_FlowAssignmentSub.Dispose();
                    _env_FlowAssignmentSub.Dispose();
                    return(false);
                }


                ExtremePoint e = new ExtremePoint();

                foreach (Node n in Data.NodeSet)
                {
                    double value = _grbModel_FlowAssignmentSub.GetVarByName("g_" + n.ID).X;
                    e.Value.Add(n, value);
                }
                foreach (Arc a in Data.ArcSet)
                {
                    double flow = _grbModel_FlowAssignmentSub.GetVarByName("x_" + a.FromNode.ID + "_" + a.ToNode.ID).X +
                                  _grbModel_FlowAssignmentSub.GetVarByName("x_" + a.ToNode.ID + "_" + a.FromNode.ID).X;
                    e.TotalCost += flow * Data.FlowFeePerUnit;
                }
                e.ID = 0;

                EPColumnPool.Add(e);

                _grbModel_FlowAssignmentSub.Dispose();
                _env_FlowAssignmentSub.Dispose();

                return(true);
            }