Scheduler::Scheduler( ModelData& md ): data(md.GetData()) { methodsSet.resize(data.GetWFCount()); maxEff = 0.0; xmlWriter = unique_ptr<ScheduleToXML>(new ScheduleToXML(data)); data.SetWfPriorities(); eff = unique_ptr<Efficiency>(new Efficiency(2.00 / data.GetprocessorsCount(), data.GetT())); maxPossible = 0.0; for (int i = 0; i < data.GetResourceCount(); i++){ Intervals initIntervals; data.Resources(i).GetCurrentWindows(initIntervals); vector <BusyIntervals> current; current = initIntervals.GetCurrentIntervals(); for (int j = 0; j < current.size(); j++){ BusyIntervals & processorIntervals = current[j]; for (auto it = processorIntervals.begin(); it != processorIntervals.end(); it++){ for (int k = 0; k < it->second.size(); k++){ maxPossible += eff->EfficiencyByPeriod(1, it->second[k].first, it->second[k].second); } } } } maxPossible = 1.00 - maxPossible; }