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); }
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); }