跳转到主要内容

添加约束

回答

评论

10评论

  • 伊莱陶尔康
    Gurobi员工Gurobi员工

    你好何塞,

    “smatr”字典应该保持一个字典,因为它是数据的问题,不是一个未知值求解。

    有一些语法问题,这段代码。最主要的就是你应该遍历中的“遇见”指数quicksum功能:

    模型。addConstrs ((quicksum (smatr (i, j) * v [j]遇到)= =0)j反应)

    与你的数据,这产生以下约束:

    $ $ \ {alignat *} 2 v_A & = 0开始\ \ 4 v_B & = 0 \ \ 2 v_C & = 0 \ \ v_D & = 0 \ \ 6 v_E & = 0 \ {alignat *} $ $

    这个系统的唯一的解决办法是零向量。这是你想要的吗?

    伊莱

    1
  • 何塞Vindel
    Gurobi-versary
    思想领袖
    调查员

    非常感谢伊莱,你的回答帮助了我很多我想要最大化是通量的零向量并没有太大的帮助。从一个方面说明,这将是原文的范围之外,我也会问你如何编写的代码或乳胶chunck未来帖子的评论,你能参考我一些文档。manbet体育手机客户端

    0
  • 伊莱陶尔康
    Gurobi员工Gurobi员工

    你好何塞,

    创建一个代码块,有一个“代码”格式写一篇文章时选择。这是一幅:

    本论坛使用MathJax呈现数学符号。创建方程系统之前发布(显示模式),我使用:

    $ $ \{对齐*}2 v_A & = 0开始\ \ 4 v_B & = 0 \ \ 2 v_C & = 0 \ \ v_D & = 0 \ \ 6 v_E & = 0 \{对齐*}$ $

    呈现数学内联,像\ (v_A = 0 \),您可以使用

    \ (v_A = 0 \)

    不幸的是,在这个论坛没有预览功能,所以我经常和数学最终编辑帖子后提交。

    最好的,

    伊莱

    0
  • 何塞Vindel
    Gurobi-versary
    思想领袖
    调查员

    非常感谢,以利总是很有帮助

    0
  • 何塞Vindel
    Gurobi-versary
    思想领袖
    调查员

    你好伊莱,

    我试着写一个背包若干代码,

    m。addVars(反应,vtype =伽马线暴。二进制,name = ' y ')

    m.addConstr (y.sum (j) < = 1 j的反应)

    但我得到这个错误

    不支持的操作数类型(s) -:“发生器”和“NoneType”

    最终我想写一个knpsack约束如下?

    \[\总和(1-y_j) \ \ leq \, K \]

    干杯

    0
  • 伊莱陶尔康
    Gurobi员工Gurobi员工

    你好何塞,

    我看到两个问题的代码:

    • 你创建新的模型变量使用Model.addVars (),但你不指定返回的tupledict对象一个Python变量命名为y。
    • tupledict.sum ()是一个快捷方法求和tupledict中的值匹配指定的模式。在这种情况下,它可能是更直接的写表达式使用quicksum ()函数。

    有一些小的变化,我们可以添加约束如下:

    # Model.addVars()返回tupledict;将其分配给Python变量y
    y = m。addVars(反应,vtype =伽马线暴。二进制,name = ' y ')

    #使用quicksum()添加约束
    #遍历quicksum内设置的反应()
    m。addConstr (quicksum (1 - y [j]为反应)< = K)

    谢谢,

    伊莱

    0
  • 何塞Vindel
    Gurobi-versary
    思想领袖
    调查员

    你好伊莱,

    后试图解决模型我在工作,当你明确约束给了我一个零矢量,所以我得到的解决方案是完全不是我所需要的东西,我检查约束,我需要有一组线性方程如下:

    \ ((1)* v_A + (1 B) * v_B + (1 C) * v_C + (1 D) * v_D + (E) * v_E = 0 \)

    等剩下的了,在这种情况下,我应该考虑

    smatr.sum (j) * v [j] = = 0 j的反应


    ,这意味着smatr作为一个变量?


    0
  • 何塞Vindel
    Gurobi-versary
    思想领袖
    调查员

    你好伊莱,

    我已经试过这个:

    我在遇到:
    m.addConstr (gp。quicksum(smatr[i,j]*v[j] for j in reactions) == 0), name='FBA')

    似乎工作给了我我想要的方程,现在,我的问题是,我怎么能把它写在列表理解呢?

    谢谢你这么多!

    何塞·亚历山大

    0
  • 何塞Vindel
    Gurobi-versary
    思想领袖
    调查员

    你好伊莱,

    我很抱歉再次打扰,但我FBA试图解决一个,之后,我得到的解决方案仍然是不同的例子我基础上,所以我试图添加一个约束的解决方案来检查我的程序不足,假设我感兴趣的一个解决方案的通量\ (v_D \)等于一个数字,我增加了约束如下,但我得到一个错误,说有办法添加约束?

    m。addConstr (v [3] = = 10)
    0
  • 伊莱陶尔康
    Gurobi员工Gurobi员工

    你好何塞,

    你可以添加约束在一个声明中使用Model.addConstrs ()方法。而不是通过单一约束方法,你通过一组生成器表达式为整个的约束。在这种情况下,语法是:

    m.addConstrs ((gp.quicksum (smatr (i, j) * v [j]j反应)= =0见过),name =“等”)

    你收到KeyError当你试图添加约束v [3] = = 10 ?在你原来的职位,您创建一个\ (v \)变量的每一个反应:

    v = m。addVars(反应,obj =生物质)

    Model.addVars ()方法返回一个tupledict对象键索引的元素反应。因此,您可以访问\ (v_D \)变量通过使用相应的反应的关键:

    m。addConstr (v (' D ') = = 10)

    如果你还没有这么做,我建议编写调试时模型的LP文件。你可以这样做的Model.write ()方法。例如:

    m.write (“fba.lp”)

    LP文件格式是人类可读的,这使得它容易视觉检查一个模型。您可能还想将名称添加到您的变量,如果你这样做。

    谢谢,

    伊莱

    0

登录留下你的评论。