public override int GetStateLogPeriod()
State 로그를 기록하는 주기를 설정합니다. 예를 들어, 5000으로 설정되었을 경우 5000개의 State 마다 한번씩 로그를 기록합니다.
public override int GetStateLogPeriod()
{
return 5000;
}
public override void WriteSolution(Solution solution)
Solution을 기록합니다.
public override void WriteSolution(Solution solution)
{
StringBuilder jobStr = new StringBuilder();
StringBuilder colorStr = new StringBuilder();
StringBuilder convStr = new StringBuilder();
IOrderedEnumerable<KeyValuePair<int, State>> states = solution.States.OrderBy(x => x.Key);
foreach (KeyValuePair<int, State> item in states)
{
CRPState state = item.Value as CRPState;
if (state.IsInitial)
continue;
jobStr.Append(state.LastRetrievedJob.Number);
colorStr.Append(state.LastRetrievedJob.Color.ColorNumber);
convStr.Append(state.CurrentConveyor.ConveyorNum);
if (state.JobCount > 0)
{
jobStr.Append("-");
colorStr.Append("-");
convStr.Append("-");
}
}
Console.WriteLine(string.Format("Job Sequence: {0}", jobStr.ToString()));
Console.WriteLine(string.Format("Color Sequence: {0}", colorStr.ToString()));
Console.WriteLine(string.Format("Conveyor Sequence: {0}", convStr.ToString()));
}
public override bool IsExportStateLog()
State 로그를 파일로 Export 할지 여부를 설정합니다.
public override bool IsExportStateLog()
{
return false;
}
public override void WriteBestSolutionLog()
현재까지의 Best Solution에 대한 로그를 기록합니다.
public override void WriteBestSolutionLog()
{
SolutionManager solutionManager = SolutionManager.Instance;
Solution bestSol = solutionManager.BestSolution;
Console.WriteLine(Constants.LINE);
Console.WriteLine(string.Format("Objective Value: {0}", bestSol.Value));
this.WriteSolution(bestSol);
Console.WriteLine(Constants.LINE);
}
public override void WriteOptimalLog()
최적해를 찾고 난 후 로그를 기록합니다.
public override void WriteOptimalLog()
{
SolutionManager solutionManager = SolutionManager.Instance;
Solution optSol = solutionManager.OptimalSolution;
Console.WriteLine(Constants.LINE);
Console.WriteLine(string.Format("Optimal Objective Value: {0}", optSol.Value));
this.WriteSolution(optSol);
Console.WriteLine(Constants.LINE);
}
public override void WritePruneLog(State state)
State가 Prune 되었을 때 로그를 기록합니다.
public override void WritePruneLog(State state)
{
Console.WriteLine("Prune => StateIndex:{0}, State:{1}, Stage:{2}, DualBound:{3}, BestValue:{4}, BestPrimalBound:{5}", state.Index, state.ToString(), state.Stage.Index, state.DualBound, state.BestValue, BoundManager.Instance.BestPrimalBound);
}