private void CheckValidateState() { List <StateActive> list = curSAS.RemoveState(Data.InitialState as IALPState); foreach (StateActive sa in list) { RMPModel.Delete(sa.Var); } }
public void DoCalculate()//Calculate the Bid-Price of current time { print("--------{0}开始求解--------", System.DateTime.Now.ToLongTimeString()); IsOptimal = false; CreateFeasibleSolution(); //检验是否有违背State的变量 foreach (StateActive sa in sas.RemoveState(Data.InitialState as IALPState)) { RMPModel.Delete(sa.Var); } double tempObj = 0; int tol = ObeyTime; for (int iter = 1; ; iter++) { print("--------{1}开始进行第{0}次循环--------", iter, System.DateTime.Now.ToLongTimeString()); if (RMPModel.Solve()) { if (RMPModel.GetObjValue() - tempObj < threshold) { tol--; } else { tol = ObeyTime; } tempObj = RMPModel.GetObjValue(); } IsOptimal = true; print("--------{1}目标值:{0}--------", RMPModel.ObjValue, System.DateTime.Now.ToLongTimeString()); print("--------{0}更新参数开始--------", System.DateTime.Now.ToLongTimeString()); UpdateDualValues(); print("--------{0}更新参数结束--------", System.DateTime.Now.ToLongTimeString()); if (tol < 0) { print("--------{0}算法达到终止条件而退出--------", System.DateTime.Now.ToLongTimeString()); break; } for (int t = CurrentTime; t < Data.TimeHorizon; t++) { int iteration = t; Task ta = factory.StartNew(() => { //print("Problem {0} on thread {1} ", iteration, Thread.CurrentThread.ManagedThreadId); bool temp; IALPState temp_s = null; IMDPDecision deci_a = null; lock (SubModel) { GenSubModelObj(iteration); temp = RCG(iteration, out temp_s, out deci_a); } lock (RMPModel) { lock (sas) { if (!temp) { AddCol(iteration, temp_s, deci_a); } } } IsOptimal = temp && IsOptimal; //print("#{0}第{1}个子问题已经解决!", System.DateTime.Now.ToLongTimeString(), iteration); }, cts.Token); tasks.Add(ta); } Task.WaitAll(tasks.ToArray()); tasks.Clear(); if (IsOptimal) { print("#已经达到最优!"); UpdateDualValues(); break; } } }