Jin_Sheng03 2023-04-08 12:03 采纳率: 100%
浏览 468
已结题

Matlab 一个奇怪的报错 无法从 optim.problemdef.OptimizationEquality 转换为 logical。

问题遇到的现象和发生背景

Matlab报错

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
clc, clear, 
load data.txt;
result = 1;
count = 0;
score = data(:,1:2:20);
probability = data(:,2:2:20);
for i = 1 : 4
    for j = 1 : 10
        low(i,j) = min(score(4 * i - 3 : 4 * i, j));
    end
end
prob = optimproblem('ObjectiveSense', 'max');
x = optimvar('x', 4, 10, 'Type', 'integer', 'LowerBound', 0, 'UpperBound', 1);
prob.Objective = sum(sum(low.*x));
prob.Constraints.con1 = sum(x,2) == 4;
for j = 1 : 10
    result = 1;
    for i = 1 : 4
        result = x(i,j) * result;
    end
    if result == 1
        count = count + 1;
    end
end
prob.Constraints.con2 = count == 4;
[sol, fval] = solve(prob),
sol.x


运行结果及详细报错内容
无法从 optim.problemdef.OptimizationEquality 转换为 logical。

出错 practice408 (第 46 行)
    if result == 1
 
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

尝试修改过result变量名也没用,在网上也没有找到合适的解决方式

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

1条回答 默认 最新

  • 阿里嘎多学长 2023-04-08 19:13
    关注

    以下内容部分参考ChatGPT模型:


    这个错误通常出现在尝试将非逻辑类型转换为逻辑类型时。根据你提供的代码,我猜测问题可能出现在这一行:

    if result == 1

    因为result是一个optimvar类型的变量,不是逻辑类型。你可以尝试将这一行改成:

    if ismembertol(result.value, 1)

    这将检查result的值是否接近1,如果是,就会执行if语句的代码块。另外,你在代码中使用了逗号运算符来分隔两个函数的调用,这可能会导致问题。你可以将这两行代码分开写,像这样:

    [sol, fval] = solve(prob);
    sol.x;

    希望这些建议能够解决你的问题。


    如果我的建议对您有帮助、请点击采纳、祝您生活愉快

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月17日
  • 已采纳回答 4月9日
  • 创建了问题 4月8日

悬赏问题

  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来