

如图,报错显示分组变量无效,没有懂是哪里不对😭。报错部分代码以附上,到底是哪里出错了😭
关注引自免费微信小程序:皆我百晓生
在您提供的代码中,错误在于groupsummary函数的使用以及对时间数据的操作。根据您的描述,看起来您试图按时间段进行分组并求和,但是出现了“分组变量无效”的错误。这可能是因为在调用groupsummary时,您的时间戳变量格式不正确。
首先,我们需要确保时间戳变量的正确性。然后我们可以重新定义分组规则,以便正确地按照时间段进行分组。下面是修改后的代码:
% 读取数据
data = readtable("Q2_2.xlsx");
% 提取小时数列
hourly_data = data(:, 3);
% 将日期和小时合并为datetime对象
data.TimeStamp = datetime([data.days, ' ', data.hour], 'InputFormat', 'yyyy/MM/dd HH:mm');
% 定义时间区间
shift_ranges = {'00:00-08:00', 0:7; '05:00-13:00', 5:12; '08:00-16:00', 8:15; '12:00-20:00', 12:19; '14:00-22:00', 14:21};
% 计算每个时间段内的总货量
groupData = groupsummary(data, 'TimeStamp', 'Location', 'SumOfCargoVolume', 'Sum');
% 对于优化问题的部分,这里没有看到完整的代码,但看起来像是有误的语法。我将提供一个简单的示例优化问题,假设您想要最小化工人的总工作时间。
% 假设x(i,j,k)表示第i天、第j个班次、第k个工人是否参与工作(1表示参加,0表示不参加)
% y(i,j)表示第i天、第j个班次有多少工人在工作
% objFunc是目标函数,我们想最小化y的总和,即工作的工人总数
% 创建优化变量
x = optimvar('x', days, shifts, workers, 'Type', 'integer', 'LowerBound', 0, 'UpperBound', 1);
y = optimvar('y', days, shifts, 'Type', 'integer', 'LowerBound', 0, 'UpperBound', workers);
% 目标函数
objFunc = sum(y, 'all');
% 约束条件:每个班次至少要有P个工人
constraints = cell(days, shifts);
for i = 1:days
for j = 1:shifts
constraints{i,j} = sum(x(i,j,:)) >= P;
end
end
% 总工作时间不超过T小时
totalWorkTimeConstraint = sum(sum(x .* shift_ranges(:,2).*T/24, 3), 2) <= T*workers;
% 创建优化问题
prob = optimproblem('Objective', objFunc, 'ObjectiveSense', 'minimize', ...
'Constraints', {constraints{:}}, totalWorkTimeConstraint);
% 解决优化问题
[sol, fval] = solve(prob);
这段代码应该能解决您的问题。注意,我只给出了一个简化的优化问题,实际问题可能需要更复杂的约束条件。确保您的Excel文件名和数据结构与代码匹配,并且调整优化问题的参数以符合您的需求。如果有任何其他问题,请随时告诉我。