大小只佬 2024-05-02 11:31 采纳率: 0%
浏览 13
已结题

不是,这到底错哪儿了😭

img


哥们在敲数学建模,它明明可以得出结果的,为什么显示错误啊😭,不是哥们这到底哪里错了啊

  • 写回答

21条回答 默认 最新

  • 专家-皆知 2024-05-02 11:31
    关注
    获得0.15元问题酬金

    参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。

    从你提供的信息来看,你遇到的是一个与scipy.optimize.linprog函数调用相关的错误。错误提示为:“Invalid Input for Linprog: A must have exactly two dimensions, and the number of columns in A must equal the size of c”。这意味着你的输入矩阵A的维度或结构不符合linprog函数的要求。具体来说,错误指出A应该恰好有两维,并且它的列数必须与向量c的长度相匹配。

    根据你的代码片段,这里有几个可能的问题点以及如何解决它们:

    1. 确保矩阵A的维度正确

    错误直接指出了A矩阵的问题,确保A是一个二维数组,并且其列数等于c的长度。你的代码中创建A的部分看起来是这样的:

    A.eq = np.zeros((N+1,K**2+N))
    

    确保这个A矩阵的列数与你的目标系数向量c匹配。如果你的c向量是基于某些决策变量的线性组合,那么A的列数必须与这些变量的数量一致。

    2. 正确构建约束矩阵和向量

    你的约束矩阵A_eq构建部分似乎有误,特别是这一行:

    A.eq[N,:M].1
    

    这里.1看起来像是一个笔误,应该是赋值操作的一部分,但具体怎么修正取决于你想要设置的具体约束条件。此外,A.eq[1,1].1A.eq[1,N+10%:N+(1*1)*8]=..S也存在类似的不明确或错误的语法。你需要根据实际问题的约束条件清晰地定义每一行和列的值。

    3. 检查c和边界条件(bounds)的定义

    确保你的目标函数系数向量c是根据实际问题正确构造的,并且其长度与A的列数匹配。同时,边界条件的设定也需要仔细检查,确保它们对于每个决策变量都是正确的。你的bounds设定看起来是这样的:

    bounds = [(c, None) for c in range(N)]  # 固定费用的边界条件
    bounds *= [(-CC, D) for c in range(N**2)]  # 距离的边界条件
    

    这里似乎有一个混淆,bounds列表的构造方式可能不是你想要的。你应该分别定义两个不同的边界列表,然后合并它们,而不是简单地乘法操作。

    解决方案示例

    为了帮助你更好地理解如何修正代码,我提供一个简化版的修复思路,但请注意,具体的修复还需要基于你的实际模型细节进行调整:

    # 假设N和K是你问题中的变量
    N = 20
    K = 10  # 假设K的值
    M = ...  # 这里需要根据实际情况定义M的值
    
    # 构建目标函数系数向量c,确保长度与A的列数匹配
    c = ...  # 根据实际问题定义
    
    # 正确构建约束矩阵A
    A_eq = np.zeros((N+1, K**2+N))
    for i in range(N):
        # 假设这里是在设置特定的约束条件,你需要根据实际情况填写
        # 注意:下面的示例仅示意性地设置了一些位置为1,实际应根据约束条件来
        A_eq[i, i] = 1  # 示例:对角线元素置1,表示资源分配等式约束
    
    # 构建等式约束右侧的向量b_eq
    b_eq = np.array([...])  # 根据实际约束条件填写
    
    # 定义决策变量的边界条件
    bounds = [(None, None) if condition else (lower_bound, upper_bound) 
              for condition, lower_bound, upper_bound in zip(
                  # 这里根据条件判断每个变量的边界,例如:
                  [True]*N + [False]*(K**2+N),  # 示例:前N个变量无界,其余有界
                  [-CC]*N + [...],  # 具体的下界
                  [D]*N + [...]  # 具体的上界
              )]
    
    # 最后调用linprog,注意参数的正确传递
    from scipy.optimize import linprog
    res = linprog(c, A_ub=None, b_ub=None, A_eq=A_eq, b_eq=b_eq, bounds=bounds)
    
    print(res)
    

    请根据你的实际问题调整上述模板中的占位符(如...)和逻辑表达,以确保它们符合你的数学模型需求。希望这能帮助你解决问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月10日
  • 创建了问题 5月2日

悬赏问题

  • ¥15 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了