8.4.4. 模型相关

模型相关的API,包括:
  • 模型的创建和修改。

  • 执行模型优化。

  • 查询模型数据,或查询解。

  • 从文件读取模型数据,或将模型数据写入文件。

    函数

    MDOaddconstr()

    向模型添加新的线性约束

    MDOaddconstrs()

    将一批约束添加到模型

    MDOaddqconstr()

    向模型添加新的二次约束

    MDOaddpsdconstr()

    向模型添加新的psd约束

    MDOaddpsdvar()

    向模型添加新的psd变量

    MDOaddqpterms()

    向当前目标函数添加新的二次目标项

    MDOaddrangeconstr()

    向模型添加新的范围约束 (同时具有LHS和RHS)

    MDOaddrangeconstrs()

    将一批范围约束添加到模型

    MDOaddrangepsdconstr()

    向模型添加新的范围psd约束 (同时具有LHS和RHS)

    MDOaddsos()

    向模型添加新的特殊有序集 (SOS) 约束

    MDOaddgenconstrIndicator()

    向模型添加新的指示约束(Indicator constraint)

    MDOaddvar()

    向模型添加新变量

    MDOaddvars()

    向模型添加一批变量

    MDOchgcoeffs()

    改变约束矩阵中的系数

    MDOcomputeIIS()

    计算至少包含一个IIS (不可约不一致子系统)

    MDOcopymodel()

    从现有模型创建 (深层) 副本

    MDOdelconstrs()

    从模型中删除约束

    MDOdelqconstrs()

    从模型中删除二次约束

    MDOdelq()

    从模型中删除所有二次目标项

    MDOdelsos()

    从模型中删除SOS约束

    MDOdelgenconstrs()

    从模型中删除一般约束(General Constraint)

    MDOdelvars()

    通过变量索引从模型中删除变量

    MDOfreemodel()

    释放现有模型并释放其所有关联资源

    MDOgetcoeff()

    检索单个约束矩阵系数

    MDOgetconstrbyname()

    按其名称查询一个线性约束

    MDOgetqconstrbyname()

    按名称获取一个二次约束

    MDOgetconstrcoeff()

    获取与指定约束和变量相关联的系数值

    MDOgetconstrs()

    按索引范围获取一批约束

    MDOgetqconstr()

    通过其索引检索二次约束

    MDOgetpsdconstr()

    检索单个psd约束矩阵的系数

    MDOgetq()

    从模型中检索所有二次目标项

    MDOgetsos()

    检索SOS约束的变量和权重

    MDOgetgenconstrIndicator()

    按其索引检索指示约束(Indicator constraint)

    MDOgetvarbyname()

    按名称检索变量

    MDOgetvars()

    从约束矩阵中检索一系列变量的非零值

    MDOloadmodel()

    从环境中创建新的优化模型,并使用提供的参数初始化新创建的模型

    MDOnewmodel()

    从环境中创建新的优化模型,并使用提供的变量初始化新创建的模型

    MDOoptimize()

    开始优化一个模型

    MDOread()

    将数据从文件加载到现有模型

    MDOreadmodel()

    从文件加载模型

    MDOreset()

    将模型重置为未求解状态,丢弃先前计算的任何解

    MDOsetconstrcoeff()

    设置与指定约束和变量关联的系数值

    MDOwrite()

    将模型数据序列化到文件

    int MDOaddconstr(MDOmodel *model, int numnz, int *cind, double *cval, char sense, double rhs, const char *constrname)

    向模型添加新的线性约束。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numnz (int) – [in] 非零的数量。

    • cind (int*) – [in] 新约束中非零的变量索引。

    • cval (double*) – [in] 新约束中的非零值。

    • sense (char) –

      [in] 新约束的比较符。有效的比较符类型包括:

      • MDO_EQUAL(‘=’) 表示相等,

      • MDO_LESS_EQUAL(‘<’) 表示小于或等于,

      • MDO_GREATER_EQUAL(‘>’) 表示大于或等于。

    • rhs (double) – [in] 新约束的右侧值。

    • constrname (const char*) – [in] 约束名称。可以为NULL。

    Returns

    指定函数状态的响应代码。

    int MDOaddconstrs(MDOmodel *model, int numconstrs, int numnz, int *cbeg, int *cind, double *cval, char *sense, double *rhs, const char **constrnames)

    将一批约束添加到模型。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numconstrs (int) – [in] 新约束的数量。

    • numnz (int) – [in] 这些新约束的非零总数。

    • cbeg (int*) –

      [in] 约束矩阵非零值以压缩稀疏行 (CSR) 格式传递到该函数中。约束矩阵中的每个约束都表示为 作为索引值对的列表,其中每个索引条目提供变量 非零系数的索引,每个值条目提供相应的 非零值。

      模型中的每个约束都有一个cbeg和clen值,表示 cind和cval数组中该约束的非零开始位置。 cbeg[i + 1] - cbeg[i] 是第i个约束的非零值的数量。它应该 至少包含 numconstrs 元素。如果 numconstrs 为零,则可以为NULL。

      例如,如果 vbeg[3] = 10cbeg[4] = 12 ,这将表明 约束3具有2 (12-10) 个与其关联的非零值。他们的变量 索引可以在cind[10] 和cind[11] 中找到,并且这些非零值的值 可以在cval[10] 和cval[11] 中找到。

    • cind (int*) – [in] 与非零值相关联的变量索引。

    • cval (double*) – [in] 与约束矩阵相关联的非零值。

    • sense (char*) –

      [in] 新约束的比较符。它应该至少包含 “numconstrs” 元素。如果 “numconstrs” 为零,则可以为NULL。有效的比较符类型包括:

      • MDO_EQUAL(‘=’) 表示相等,

      • MDO_LESS_EQUAL(‘<’) 表示小于或等于,

      • MDO_GREATER_EQUAL(‘>’) 表示大于或等于。

    • rhs (double*) – [in] 新约束的右侧值。它应该包含在 最少的 “numconstrs” 元素。如果 “numconstrs” 为零,则可以为NULL。

    • constrnames (const char**) – [in] 每个新约束的约束名称。可以为NULL。

    Returns

    指定函数状态的响应代码。

    int MDOaddqconstr(MDOmodel *model, int numlnz, int *lind, double *lval, int numqnz, int *qrow, int *qcol, double *qval, char sense, double rhs, const char *constrname)

    向模型添加新的二次约束。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numlnz (int) – [in] 线性部分的非零值。

    • lind (int*) – [in] 线性项的关联变量。

    • lval (double*) – [in] 线性项的系数。

    • numqnz (int) – [in] 二次项的数量。

    • qrow (int*) – [in] 二次项的第一个变量列表。

    • qcol (int*) – [in] 二次项的第二个变量列表。

    • qval (double*) – [in] 二次项系数。

    • sense (char) –

      [in] 新约束的比较符。有效的比较符类型包括:

      • MDO_EQUAL(‘=’) 表示相等,

      • MDO_LESS_EQUAL(‘<’) 表示小于或等于,

      • MDO_GREATER_EQUAL(‘>’) 表示大于或等于。

    • rhs (double) – [in] 新约束的右侧值。

    • constrname (const char*) – [in] 新的二次约束的名称。

    Returns

    指定函数状态的响应代码。

    int MDOaddpsdconstr(MDOmodel *model, int numnz, int numpsdvars, int numpsdnz, int *cind, double *cval, int *psdvarind, int *mbgn, int *indices, double *values, char sense, double rhs, const char *constrname)

    向模型添加新的psd约束。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numnz (int) – [in] psd约束的线性部分的非零条目数。

    • numpsdvars (int) – [in] 关联的psd变量的数量。

    • numpsdnz (int) – [in] 新psd约束中所有非零矩阵中非零项的总数。

    • cind (int*) – [in] 新psd约束中线性部分的非零变量索引。

    • cval (double*) – [in] 新psd约束中线性部分的非零值。

    • psdvarind (int*) – [in] Psd约束的psd部分中的psd变量索引。

    • mbgn (int*) – [in] 每个非零矩阵中第一个非零项的起始索引。

    • indices (int*) – [in] 所有非零矩阵的非零条目的索引。

    • values (double*) – [in] 所有非零矩阵的非零项的值。

    • sense (char) –

      [in] 新的psd约束的意义。有效的sense类型包括:

      • MDO_EQUAL(‘=’) 表示相等,

      • MDO_LESS_EQUAL(‘<’) 表示小于或等于,

      • MDO_GREATER_EQUAL(‘>’) 表示大于或等于。

    • rhs (double) – [in] 新psd约束的右侧值。

    • constrname (const char*) – [in] psd约束名称。可以为NULL。

    Returns

    指定函数状态的响应代码。

    int MDOaddpsdvar(MDOmodel *model, int dim, int numobjnz, int *objind, double *objval, const char *varname)

    向模型添加新的psd变量。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • dim (int) – [in] 新psd变量的维度。

    • numobjnz (int) – [in] 所有非零矩阵的非零条目的数量。 对于与变量相关的目标函数中的非零系数, 每个系数是一个矩阵。

    • objind (int*) – [in] 目标非零项矩阵元素关联的索引 使用新的psd变量。

    • objval (double*) – [in] 与关联的目标矩阵元素的值 新的psd变量。

    • varname (const char*) – [in] 变量名称。可以为NULL。

    Returns

    指定函数状态的响应代码。

    int MDOaddqpterms(MDOmodel *model, int numqnz, int *qrow, int *qcol, double *qval)

    向当前目标函数添加新的二次目标项。 请注意,添加具有变量i和j的项,和添加具有变量j和i的项是等效的。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numqnz (int) – [in] 与新二次项相关联的非零的总数。

    • qrow (int*) – [in] 与二次项相关联的第一个变量索引。

    • qcol (int*) – [in] 与二次项相关的第二个变量索引。

    • qval (double*) – [in] 与二次项相关联的非零值。

    Returns

    指定函数状态的响应代码。

    int MDOaddrangeconstr(MDOmodel *model, int numnz, int *cind, double *cval, double lower, double upper, const char *constrname)

    向模型添加新的范围约束 (同时具有LHS和RHS)。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numnz (int) – [in] 与新约束关联的非零数。

    • cind (int*) – [in] 与新约束相关联的非零变量索引。

    • cval (double*) – [in] 与新约束关联的非零值。

    • lower (double) – [in] 新约束的左侧值。默认值为 -MDO_INFINITY如果为NULL。

    • upper (double) – [in] 新约束的右侧值。默认值为 MDO_INFINITY如果为NULL。

    • constrname (const char*) – [in] 新约束的约束名称。可以为NULL。

    Returns

    指定函数状态的响应代码。

    int MDOaddrangeconstrs(MDOmodel *model, int numconstrs, int numnz, int *cbeg, int *cind, double *cval, double *lower, double *upper, const char **constrnames)

    将一批范围约束添加到模型。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numconstrs (int) – [in] 应添加新约束的数量。

    • numnz (int) – [in] 与新约束关联的非零的总数。

    • cbeg (int*) – [in] 约束矩阵非零值以压缩稀疏行 (CSR) 格式的形式传递到该函数中。约束矩阵中的每个约束都表示为作为索引值对的列表,其中每个索引条目提供变量非零系数的索引,每个值条目提供相应的非零值。模型中的每个约束都有一个cbeg和clen值,表示cind和cval数组中该约束的非零开始位置,并且 cbeg[i + 1] - cbeg[i] 是第i个约束的非零值的数量。它应至少包含 numconstrs 元素。如果 numconstrs 为零,则可以为NULL。 例如,如果 vbeg[3] = 10cbeg[4] = 12 ,这将表明约束3具有2 (12 - 10) 个与其关联的非零值。他们的变量索引可以在cind[10] 和cind[11] 中找到,并且这些非零值的值可以在cval[10] 和cval[11] 中找到。

    • cind (int*) – [in] 与非零值相关联的变量索引。

    • cval (double*) – [in] 与约束矩阵相关联的非零值。

    • lower (double*) – [in] 新范围约束的左侧值。

    • upper (double*) – [in] 新范围约束的右侧值。

    • constrnames (const char**) – [in] 新范围约束的约束名称。可以为NULL。

    Returns

    指定函数状态的响应代码。

    int MDOaddrangepsdconstr(MDOmodel *model, int numnz, int numpsdvars, int numpsdnz, int *cind, double *cval, int *psdvarind, int *mbgn, int *indices, double *values, double lower, double upper, const char *constrname)

    向模型添加新的范围psd约束 (同时具有LHS和RHS)。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numnz (int) – [in] psd约束的线性部分的非零条目数。

    • numpsdvars (int) – [in] 关联的psd变量的数量。

    • numpsdnz (int) – [in] psd约束中,所有非零矩阵中非零项的总数。

    • cind (int*) – [in] 新psd约束中线性部分的非零变量索引。

    • cval (double*) – [in] 新psd约束中线性部分的非零值。

    • psdvarind (int*) – [in] Psd约束的psd部分中的psd变量索引。

    • mbgn (int*) – [in] 每个非零矩阵中第一个非零项的起始索引。

    • indices (int*) – [in] 所有非零矩阵的非零条目的索引。

    • values (double*) – [in] 所有非零矩阵的非零项的值。

    • lower (double) – [in] 新约束的左侧值。默认值为 -MDO_INFINITY如果为NULL。

    • upper (double) – [in] 新约束的右侧值。默认值为 MDO_INFINITY如果为NULL。

    • constrname (const char*) – [in] psd约束名称。可以为NULL。

    Returns

    指定函数状态的响应代码。

    int MDOaddsos(MDOmodel *model, int numsos, int nummerbers, int *types, int *beg, int *ind, double *weight)

    向模型添加新的特殊有序集 (SOS) 约束。

    Parameters
    • model (MDOmodel*) – [in] 模型对象。

    • numsos (int) – [in] 要添加的SOS约束的数量。

    • nummerbers (int) – [in] 与新约束关联的变量总数。

    • types (int*) –

      [in] 每个新SOS约束的SOS类型。有效类型包括:

      • 1表示SOS_TYPE1

      • 2表示SOS_TYPE2

    • beg (int*) – [in] 每个SOS约束的开始索引。

    • ind (int*) – [in] 与新的SOS约束相关联的变量索引。

    • weight (double*) – [in] 每个参与变量的权重。

    Returns

    指定函数状态的响应代码。

    int MDOaddgenconstrIndicator(MDOmodel *model, const char *name, int binvar, int binval, int nvars, const int *vars, const double *vals, char sense, double rhs)

    向模型添加新的指示约束(Indicator constraint)。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • name (const char*) – [in] 新Indicator约束的名称。

    • binvar (int) – [in] 二进制变量索引。

    • binval (int) – [in] 线性约束生效时的二进制值。

    • nvars (int) – [in] 线性约束中的变量个数。

    • vars (const int*) – [in] 与线性约束相关联的变量索引。

    • vals (const double*) – [in] 与线性约束相关联的变量系数。

    • sense (char) – [in] 线性约束的比较符。

    • rhs (double) – [in] 线性约束的右侧值。

    Returns

    指定函数状态的响应代码。

    int MDOaddvar(MDOmodel *model, int numnz, int *vind, double *vval, double obj, double lb, double ub, char vtype, const char *varname)

    向模型添加新变量。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numnz (int) – [in] 约束矩阵中与新变量相关联的非零数。

    • vind (int*) – [in] 与新变量的非零相关联的约束索引。

    • vval (double*) – [in] 与新变量的非零值关联的值。

    • obj (double) – [in] 新变量在目标函数中的系数。

    • lb (double) – [in] 新变量的下界。如果为NULL,则默认值为0。

    • ub (double) – [in] 新变量的上界。如果为NULL,则默认值为MDO_INFINITY。

    • vtype (char) –

      [in] 新变量的变量类型。变量类型包括:

      • MDO_CONTINUOUS(‘C’) 对于连续变量,

      • MDO_BINARY(‘B’) 为二进制变量,

      • MDO_INTEGER(‘I’) 为整型变量,

      • MDO_SEMICONT(‘S’) 对于半连续变量,

      • MDO_SEMIINT(‘N’) 表示半整型变量。

    • varname (const char*) – [in] 变量名称。可以为NULL。

    Returns

    指定函数状态的响应代码。

    int MDOaddvars(MDOmodel *model, int numvars, int numnz, int *vbeg, int *vind, double *vval, double *obj, double *lb, double *ub, char *vtype, const char **varnames)

    向模型添加一批变量。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numvars (int) – [in] 新变量的数量。

    • numnz (int) – [in] 新变量的约束矩阵中非零的总数。

    • vbeg (int*) – [in] 约束矩阵非零值以压缩的形式传递到该函数中 稀疏列 (CSC) 格式。约束矩阵中的每一列都表示为 作为索引值对的列表,其中每个索引条目提供约束 非零系数的索引,每个值条目提供相应的 非零值。模型中的每个变量都有一个vbeg和vlen值,表示 该变量在vind和vval中非零的起始位置 数组,以及该变量的非零值的数量。它应该 至少包含 numvars 元素。如果 numvars 为零,则可以为NULL。 例如,如果vbeg[3] = 10和vlen[3] = 2,这将表明 变量3有两个与之关联的非零值。他们的约束指数 可以在vind[10] 和vind[11] 中找到,以及那些的数值 非零可以在vval[10] 和vval[11] 中找到。

    • vind (int*) – [in] 关联到非零值的约束的索引。如果 numconstrs 为零,则可以为NULL。

    • vval (double*) – [in] 与约束矩阵非零相关联的值。如果 numconstrs 为零,则可以为NULL。

    • obj (double*) – [in] 新变量的目标系数,它应该至少包含 numvars 个 元素。如果 numvars 为零,则可以为NULL。

    • lb (double*) – [in] 每个新变量的下界。如果 numvars 为零,则可以为NULL。

    • ub (double*) – [in] 每个新变量的上界。如果 numvars 为零,则可以为NULL。

    • vtype (char*) –

      [in] 每个新变量的变量类型。NULL等价于MDO_CONTINUOUS。变量类型包括:

      • MDO_CONTINUOUS(‘C’) 对于连续变量,

      • MDO_BINARY(‘B’) 为二进制变量,

      • MDO_INTEGER(‘I’) 为整型变量,

      • MDO_SEMICONT(‘S’) 对于半连续变量,

      • MDO_SEMIINT(‘N’) 表示半整型变量。

    • varnames (const char**) – [in] 每个新变量的变量名。可以为NULL。

    Returns

    指定函数状态的响应代码。

    int MDOchgcoeffs(MDOmodel *model, int numchgs, int *cind, int *vind, double *val)

    改变约束矩阵中的系数。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numchgs (int) – [in] 要更改的系数的数量。

    • cind (int*) – [in] 约束矩阵中的约束索引。

    • vind (int*) – [in] 约束矩阵中的变量索引。

    • val (double*) – [in] 由 cindvind 指示的系数的新值。

    Returns

    指定函数状态的响应代码。

    int MDOcomputeIIS(MDOmodel *model)

    计算至少包含一个IIS (不可约不一致子系统)。 IIS是变量边界和约束边界的子集,该子集满足:

    1. 子集对应的子问题仍然不可行

    2. 删除该子集中的任何边界后,子问题变得可行。

    有关更多详细信息,请检查IIS相关属性的变量和约束。

    Parameters
    • model (MDOmodel*) – [in] 用于计算IIS的模型。

    Returns

    指定函数状态的响应代码。

    Note

    子系统的基数应该很小。请注意,这个问题应该是不可解的。

    MDOmodel *MDOcopymodel(MDOmodel *model)

    从现有模型创建 (深层) 副本。

    Parameters
    • model (MDOmodel*) – [in] 现有的模型。

    Returns

    应放置新创建的模型的位置。

    int MDOdelconstrs(MDOmodel *model, int numdel, int *ind)

    从模型中删除约束。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numdel (int) – [in] 要删除约束的数量。

    • ind (int*) – [in] 要删除的约束索引。

    Returns

    指定函数状态的响应代码。

    Note

    该函数调用将触发内部数据的重建结构,因此为了更好的性能,请批量删除尽可能多的约束。

    int MDOdelqconstrs(MDOmodel *model, int numdel, int *ind)

    从模型中删除二次约束。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numdel (int) – [in] 要删除二次约束的数量。

    • ind (int*) – [in] 要删除的二次约束索引。

    Returns

    指定函数状态的响应代码。

    Note

    此函数调用触发内部数据的重建,因此批量删除尽可能多的二次约束,以获得更好的性能。

    int MDOdelq(MDOmodel *model)

    从模型中删除所有二次目标项。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    Returns

    指定函数状态的响应代码。

    int MDOdelsos(MDOmodel *model, int len, int *ind)

    从模型中删除SOS约束。

    Parameters
    • model (MDOmodel*) – [in] 模型对象。

    • len (int) – [in] 要删除的SOS约束的数量。

    • ind (int*) – [in] 要删除的SOS约束的索引。

    Returns

    指定函数状态的响应代码。

    int MDOdelgenconstrs(MDOmodel *model, int numdel, int *ind)

    从模型中删除一般约束(General Constraint)。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numdel (int) – [in] 要删除一般约束的数量。

    • ind (int*) – [in] 要删除的一般约束索引。

    Returns

    指定函数状态的响应代码。

    Note

    该函数调用将触发内部数据的重建结构,因此为了更好的性能,请批量删除尽可能多的约束。

    int MDOdelvars(MDOmodel *model, int numdel, int *ind)

    通过变量索引从模型中删除变量。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numdel (int) – [in] 要删除的变量数。

    • ind (int*) – [in] 变量索引。

    Returns

    指定函数状态的响应代码。

    Note

    该函数调用将触发内部数据的重建 结构,因此为了更好的性能,请批量删除尽可能多的变量。

    int MDOfreemodel(MDOmodel *model)

    释放现有模型并释放其所有关联资源。

    Parameters
    • model (MDOmodel*) – [in] 要释放的模型。

    Returns

    指定函数状态的响应代码。

    int MDOgetcoeff(MDOmodel *model, int constrind, int varind, double *valP)

    检索单个约束矩阵系数。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • constrind (int) – [in] 约束索引。

    • varind (int) – [in] 变量索引。

    • valP (double*) – [out] 保存系数值的地方。

    Returns

    指定函数状态的响应代码。

    int MDOgetconstrbyname(MDOmodel *model, const char *name, int *constrnumP)

    按其名称查询一个线性约束。 请注意,如果多个线性约束具有相同的名称,则该函数随机选择一个。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • name (const char*) – [in] 约束名称。

    • constrnumP (int*) – [out] 保存命名约束索引的位置。如果没有找到这样的名称则为-1。

    Returns

    指定函数状态的响应代码。

    int MDOgetqconstrbyname(MDOmodel *model, const char *qcname, int *constrnumP)

    按名称获取一个二次约束。 请注意,如果多个二次约束具有相同的名称,则此函数随机选择一个。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • qcname (const char*) – [in] 二次约束名称。

    • constrnumP (int*) – [out] 保存命名的二次约束索引的位置。如果没有找到这样的名称则返回-1。

    Returns

    指定函数状态的响应代码。

    int MDOgetconstrcoeff(MDOmodel *model, int rind, int cind, double *coeff)

    获取与指定约束和变量相关联的系数值。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • rind (int) – [in] 约束索引。

    • cind (int) – [in] 变量索引。

    • coeff (double*) – [out] 保存结果系数值的位置。

    Returns

    指定函数状态的响应代码。

    int MDOgetconstrs(MDOmodel *model, int *numnzP, int *cbeg, int *cind, double *cval, int start, int len)

    按索引范围获取一批约束。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numnzP (int*) – [out] 检索的非零总数。

    • cbeg (int*) –

      [out] 约束矩阵非零值在压缩稀疏行中返回 (CSR) 格式。

      约束矩阵中的每个约束都表示为 作为索引值对的列表,其中每个索引条目提供变量 非零系数的索引,每个值条目提供相应的 非零值。

      每个约束都有一个关联的cbeg值,指示 cind和cval数组中该约束的非零起始位置。

      该指针应至少具有 len 元素空间,其中cbeg[i] 将是 第i个约束的 cind 中关联非零的起始索引,以及 cbeg[i + 1] - cbeg[i] 将是第i个约束的非零数。

    • cind (int*) – [out] 保存约束非零索引。

    • cval (double*) – [out] 保存约束非零值。

    • start (int) – [in] 要检索的起始约束索引。

    • len (int) – [in] 要检索的约束的数量。

    Returns

    指定函数状态的响应代码。

    int MDOgetqconstr(MDOmodel *model, int qconstr, int *numlnz, int *lind, double *lval, int *numqnz, int *qrow, int *qcol, double *qval)

    通过其索引检索二次约束。通常,此函数应被调用两次。第一次调用传入 numlnznumqnz (为其他参数传入NULL) 来获取线性和二次项的数量,然后可以分配空间来进行第二次调用。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • qconstr (int) – [in] 要检索的二次约束索引。

    • numlnz (int*) – [out] 保存线形项数量的空间。

    • lind (int*) – [out] 保存线性项的变量列表的位置。可以为NULL。

    • lval (double*) – [out] 保存线性项系数的位置。可以为NULL。

    • numqnz (int*) – [out] 存放二次项数量的空间。

    • qrow (int*) – [out] 保存二次项的第一个变量列表的位置。可以为NULL。

    • qcol (int*) – [out] 保存二次项的第二个变量列表的位置。可以为NULL。

    • qval (double*) – [out] 保存二次系数的位置。可以为NULL。

    Returns

    指定函数状态的响应代码。

    int MDOgetpsdconstr(MDOmodel *model, int rind, int *numnzs, int *numpsdvars, int *nummatnz, int *cind, double *cval, int *psdvarind, int *mbgn, int *mind, double *mval)

    检索单个psd约束矩阵的系数。 系数本身也是一个矩阵。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • rind (int) – [in] 约束索引。

    • numnzs (int*) – [out] 线性部分中非零的个数。

    • numpsdvars (int*) – [out] 关联的psd变量的数量。

    • nummatnz (int*) – [out] 矩阵中非零条目的数量。

    • cind (int*) – [out] 约束的线性部分中的变量索引

    • cval (double*) – [out] 约束线性部分的变量系数

    • psdvarind (int*) – [out] 保存psd变量索引的位置。可以为NULL。

    • mbgn (int*) – [out] 保存每个矩阵的起始索引的位置。可以为NULL。

    • mind (int*) – [out] 保存矩阵元素的索引的位置。可以为NULL。

    • mval (double*) – [out] 保存矩阵元素值的位置。可以为NULL。

    Returns

    指定函数状态的响应代码。

    int MDOgetq(MDOmodel *model, int *numqnzP, int *qrow, int *qcol, double *qval)

    从模型中检索所有二次目标项。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numqnzP (int*) – [out] 保存二次非零元数目的位置。

    • qrow (int*) – [out] 保存第一个变量索引的位置。它至少应该有 numqnzP 个元素空间。

    • qcol (int*) – [out] 保存第二个变量索引的位置。它至少应该有 numqnzP 个元素空间。

    • qval (double*) – [out] 存放二次目标项非零值的地方。它 应该至少有 numqnzP 元素空间。

    Returns

    指定函数状态的响应代码。

    int MDOgetsos(MDOmodel *model, int *nummembers, int *sostype, int *beg, int *ind, double *weight, int start, int len)

    检索SOS约束的变量和权重。

    Parameters
    • model (MDOmodel*) – [in] 模型对象。

    • nummembers (int*) – [out] 保存每个SOS约束包含的变量数目。

    • sostype (int*) – [out] 保存请求的SOS约束类型的位置。

    • beg (int*) – [out] 保存每个SOS约束的开始索引列表的位置。

    • ind (int*) – [out] 保存与SOS约束相关联的变量索引的位置。

    • weight (double*) – [out] 保存与SOS约束相关联的变量权重的位置。

    • start (int) – [in] 要请求的起始SOS约束索引。

    • len (int) – [in] 要请求的SOS约束的数量。

    Returns

    指定函数状态的响应代码。

    int MDOgetgenconstrIndicator(MDOmodel *model, int genconstr, int *binvarP, int *binvalP, int *nvarsP, int *vars, double *vals, char *sense, double *rhs)

    按其索引检索指示约束(Indicator constraint)。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • genconstr (int) – [in] 要检索的Indicator约束的索引。

    • binvarP (int*) – [out] 保存二进制变量索引的位置。

    • binvalP (int*) – [out] 保存线性约束生效时二进制值的位置。

    • nvarsP (int*) – [out] 保存在线性约束中变量数量的位置。

    • vars (int*) – [out] 保存与线性约束关联的变量索引的位置。

    • vals (double*) – [out] 保存与线性约束关联的变量系数的位置。

    • sense (char*) – [out] 保持线性约束比较符的位置。

    • rhs (double*) – [out] 保存线性约束的右侧值的位置。

    Returns

    指定函数状态的响应代码。

    int MDOgetvarbyname(MDOmodel *model, const char *name, int *varnumP)

    按名称检索变量。如果多个变量具有相同的名称, 该函数随机选择一个。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • name (const char*) – [in] 变量名称。

    • varnumP (int*) – [out] 存放可变索引的位置。

    Returns

    指定函数状态的响应代码。

    int MDOgetvars(MDOmodel *model, int *numnzP, int *vbeg, int *vind, double *vval, int start, int len)

    从约束矩阵中检索一系列变量的非零值。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • numnzP (int*) – [out] 与变量关联的非零数。

    • vbeg (int*) – [out] 在压缩稀疏列(CSC)格式保存的约束矩阵中,返回矩阵的多列。 约束中的每一列被表示为一个键值对,它的key是对应约束的索引值,它的value是该列中该索引的系数。 数组 vbeg 的第i个元素,表示第i个变量在 vindvval 中的起始位置。数组 vbeg 应该至少有 len 个元素空间。

    • vind (int*) – [out] 放置与非零值关联的约束索引。

    • vval (double*) – [out] 放置与约束矩阵非零值相关联的系数值。

    • start (int) – [in] 要从中检索非零值的变量的起始变量索引。

    • len (int) – [in] 要从中检索非零值的变量数。

    Returns

    指定函数状态的响应代码。

    int MDOloadmodel(MDOenv *env, MDOmodel **modelP, const char *Pname, int numvars, int numconstrs, int objsense, double objcon, double *obj, char *sense, double *rhs, int *vbeg, int *vlen, int *vind, double *vval, double *lb, double *ub, char *vtype, const char **varnames, const char **constrnames)

    从环境中创建新的优化模型,并使用提供的参数初始化新创建的模型。该模型在初始化后,即可被优化或修改。

    Parameters
    • env (MDOenv*) – [in] 环境指针。

    • modelP (MDOmodel**) – [out] 应放置指向新创建模型的指针的位置。

    • Pname (const char*) – [in] 问题名称,可以为NULL或空字符串。

    • numvars (int) – [in] 要添加到新创建的模型中的变量数。

    • numconstrs (int) – [in] 要添加到新创建的模型的约束数。

    • objsense (int) –

      [in] 新模型的优化方向。

      • MDO_MINIMIZE(1) 用于最小化 (默认)

      • 并且,MDO_MAXIMIZE(-1) 用于最大化。

    • objcon (double) – [in] 新模型目标函数的常数项。

    • obj (double*) – [in] 新变量对应的目标函数系数,它应该至少包含 numvars 元素。如果 numvars 为零,则可以为NULL。

    • sense (char*) –

      [in] 新约束的不等号。它应该至少包含 numconstrs 元素。如果 numconstrs 为零,则可以为NULL。有效的不等号类型包括:

      • MDO_EQUAL(‘=’) 表示相等,

      • MDO_LESS_EQUAL(‘<’) 表示小于或等于,

      • MDO_GREATER_EQUAL(‘>’) 表示大于或等于。

    • rhs (double*) – [in] 新约束的右侧值。它应该至少包含 numconstrs 元素。如果 numconstrs 为零,则可以为NULL。

    • vbeg (int*) –

      [in] 约束矩阵非零值以压缩稀疏列 (CSC) 格式传递到该函数中。约束矩阵中的每一列表示为(索引,值)的列表,列表中每个条目提供约束的索引,和非零值。模型中的每个变量都有一个 vbegvlen 值,表示该变量在 vindvval 数组中非零值的起始位置,和该变量的非零值的总数。它应该 至少包含 numvars 元素。如果 numvars 为零,则可以为NULL。

      例如,如果 vbeg[3] = 10vlen[3] = 2 ,则表示索引为3的变量,具有与其相关联的两个非零值。它们的约束索引可以在 vind[10]vind[11] 中找到,以及它们的非零值可以在 vval[10]vval[11] 中找到。

    • vlen (int*) – [in] 与每个变量关联的约束矩阵非零值的数量。它应该至少包含 numvars 元素。如果 numvars 为零,则可以为NULL。

    • vind (int*) – [in] 关联到非零值的约束的索引。如果 numconstrs 为零,则可以为NULL。

    • vval (double*) – [in] 与约束矩阵非零相关联的值。如果 numconstrs 为零,则可以为NULL。

    • lb (double*) – [in] 每个新变量的下界。如果 numvars 为零,则可以为NULL。

    • ub (double*) – [in] 每个新变量的上界。如果 numvars 为零,则可以为NULL。

    • vtype (char*) –

      [in] 每个新变量的变量类型。为NULL时,变量将默认被视为连续变量。变量类型包括:

      • MDO_CONTINUOUS(‘C’) 为连续变量,

      • MDO_BINARY(‘B’) 为二进制变量,

      • MDO_INTEGER(‘I’) 为整型变量,

      • MDO_SEMICONT(‘S’) 对于半连续变量,

      • MDO_SEMIINT(‘N’) 表示半整型变量。

    • varnames (const char**) – [in] 每个新变量的变量名。可以为NULL。

    • constrnames (const char**) – [in] 每个新约束的约束名称。可以为NULL。

    Returns

    指定函数状态的响应代码。

    int MDOnewmodel(MDOenv *env, MDOmodel **modelP, const char *Pname, int numvars, double *obj, double *lb, double *ub, char *vtype, const char **varnames)

    从环境中创建新的优化模型,并使用提供的变量初始化新创建的模型。模型在之后即可被修改。当继续添加约束后,模型则可以被优化。

    Parameters
    • env (MDOenv*) – [in] 环境指针。

    • modelP (MDOmodel**) – [out] 应放置指向新创建模型的指针的位置。

    • Pname (const char*) – [in] 问题名称可以为NULL或空字符串。

    • numvars (int) – [in] 要添加到新创建的模型中的变量数。

    • obj (double*) – [in] 新变量在目标函数中的系数,它至少应包含 Numvars 元素。如果 numvars 为零,则可以为NULL。

    • lb (double*) – [in] 每个新变量的下界。如果 numvars 为零,则可以为NULL。

    • ub (double*) – [in] 每个新变量的上界。如果 numvars 为零,则可以为NULL。

    • vtype (char*) –

      [in] 每个新变量的变量类型。为NULL时,变量将被视为连续变量。变量类型包括:

      • MDO_CONTINUOUS(‘C’) 为连续变量,

      • MDO_BINARY(‘B’) 为二进制变量,

      • MDO_INTEGER(‘I’) 为整型变量,

      • MDO_SEMICONT(‘S’) 对于半连续变量,

      • MDO_SEMIINT(‘N’) 表示半整型变量。

    • varnames (const char**) – [in] 每个新变量的变量名。可以为NULL。

    Returns

    指定函数状态的响应代码。

    int MDOoptimize(MDOmodel *model)

    开始优化一个模型。

    Parameters
    • model (MDOmodel*) – [in] 要优化的模型。

    Returns

    指定函数状态的响应代码。

    int MDOread(MDOmodel *model, const char *filename)

    将数据从文件加载到现有模型。

    Parameters
    • model (MDOmodel*) – [in] 现有的模型指针。

    • filename (const char*) – [in] 存储数据的文件的路径。请注意,文件格式及其压缩类型 (可选) 在文件名后缀中编码。有效后缀为用于参数加载的.prm,用于加载MIP初始解的.mst。可选的压缩类型后缀为.gz或.bz2。

    Returns

    指定函数状态的响应代码。

    int MDOreadmodel(MDOenv *env, const char *filename, MDOmodel **modelP)

    从文件加载模型。

    Parameters
    • env (MDOenv*) – [in] 环境指针。

    • filename (const char*) – [in] 存储模型的文件的路径。请注意,文件格式及其压缩类型 (可选) 在文件名后缀中编码。有效的后缀为:.lp,.mps,.qps和.dat-s,可选的压缩类型为.gz或.bz2。

    • modelP (MDOmodel**) – [out] 存放新加载的模型的位置。

    Returns

    指定函数状态的响应代码。

    int MDOreset(MDOmodel *model, int clearall)

    将模型重置为未求解状态,丢弃先前计算的任何解。

    Parameters
    • model (MDOmodel*) – [in] 要重置的模型。

    • clearall (int) – [in] 是否清除所有信息多于解决方案。1表示 “是”,0表示 “仅清除” 解决方案。

    Returns

    指定函数状态的响应代码。

    int MDOsetconstrcoeff(MDOmodel *model, int rind, int cind, double coeff)

    设置与指定约束和变量关联的系数值。

    Parameters
    • model (MDOmodel*) – [in] 模型指针。

    • rind (int) – [in] 约束索引。

    • cind (int) – [in] 变量索引。

    • coeff (double) – [in] 新的系数值。

    Returns

    指定函数状态的响应代码。

    int MDOwrite(MDOmodel *model, const char *filename)

    将模型数据序列化到文件。包括模型本身或其他设置。

    Parameters
    • model (MDOmodel*) – [in] 模式指针。

    • filename (const char*) – [in] 数据序列化的文件路径。请注意,数据类型及其压缩 类型 (可选) 在文件名后缀中编码。有效的后缀为.lp,.mps,.qps 这些后缀将序列化模型本身。而.sol,.bas,.prm,以及.mst将序列化模型的解,变量的基值,参数设置,以及MIP的初始解到文件。 可选的压缩类型后缀.gz或.bz2。

    Returns

    指定函数状态的响应代码。