Example #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);
        }
Example #2
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);
            }