Мне нужно создать планирование для сотрудников с помощью инструментов оптимизации Google.Одним из ограничений будет то, что у каждого сотрудника будет примерно одинаковое количество рабочих часов.
Таким образом, я хочу собрать в списке, сколько часов работает каждый сотрудник, а затем минимизировать стандартное отклонение этого списка..
var workingTimes = new List<SumArray>();
foreach (var employee in employees) {
// Gather the duration of each task the employee is
// assigned to in a list
// o.IsAssign is an IntVar and task.Duration is an int
var allDurations = shifts.Where(o => o.Employee == employee.Name)
.Select(o => o.IsAssigned * task[o.Task].Duration);
// Total time the employee is working
var workTime = new SumArray(allDurations);
workingTimes.Add(workTime);
}
Теперь я хочу минимизировать стандартное значение workingTimes
.Я попробовал следующее:
IntegerExpression workingTimesMean = new SumArray(workingTimes) * (1/workingTimes.Count);
var gaps = workingTimes.Select(o => (o - workingTimesMean)*(o - workingTimesMean));
var stdev = new SumArray(gaps) * (1/gaps.Count());
model.Minimize(stdev);
Но запрос LINQ во 2-й строке последнего фрагмента кода выдает мне ошибку:
Невозможно применить оператор * к IntegerExpressionи IntegerExpression
Как вычислить стандартное отклонение для Google.OrTools.Sat.SumArray?