*little_XX* 2024-04-15 16:55 采纳率: 75%
浏览 21
已结题

matlab报错:分组变量无效

img

img


如图,报错显示分组变量无效,没有懂是哪里不对😭。报错部分代码以附上,到底是哪里出错了😭

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-15 16:55
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的代码中,错误在于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文件名和数据结构与代码匹配,并且调整优化问题的参数以符合您的需求。如果有任何其他问题,请随时告诉我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月7日
  • 已采纳回答 5月30日
  • 创建了问题 4月15日