8.2.1. MdoCol

class mindopt::MdoCol

列对象。

此对象会实现包含列对象的数据结构,该列对象由一组约束和系数对组成。

将列输入优化模型的典型步骤如下:

  1. 调用 MdoCol::MdoCol() 创建一个空列对象。

  2. 调用 MdoCol::addTerms() 输入非零元素。

可通过调用 MdoCol::getCons()MdoCol::getCoeff() 查询非零元素,以访问关联的约束和系数。

Note

一般来说,这是一个有效期很短的临时对象。

示例

/* Create an empty model. */
MdoModel model;

MdoI32 itmp = 0;
MdoReal dtmp = 0.0;

/* Add empty constraints. */
std::vector<std::reference_wrapper<MdoCons> > cons;
cons.push_back(model.addCons(1.0, 1.0,           "c0"));
cons.push_back(model.addCons(1.0, MDO_INFINITY,  "c1"));

/* Input columns. */
std::vector<MdoCol> col(4);
col[0].addTerm(cons[0], 1.0);
col[0].addTerm(cons[1], 1.0);
col[1].addTerm(cons[0], 1.0);
col[2].addTerm(cons[0], 2.0);
col[2].addTerm(cons[1], -1.0);
col[3].addTerm(cons[0], 3.0);
col[3].addTerm(cons[1], 6.0);

/* Populate column object */
std::cout << "Original col: " << std::endl;
std::cout << "col[0]: " << col[0] << std::endl;
std::cout << "col[1]: " << col[1] << std::endl;
std::cout << "col[2]: " << col[2] << std::endl;

/* Check column */
MdoCons c0 = model.getCons(0);
dtmp = col[0].getCoeff(0);
itmp = col[0].getSize();

/* Remove value from column */
col[0].removeTerm(1);
itmp = col[0].getSize();
col[1].removeTerm(c0);
itmp = col[1].getSize();
col[0].clear();
itmp = col[0].getSize();

/* Adds another column object to itself. */
double *col_coeff_array = new double[col[2].getSize()];
double *col_coeff_chk = new double[col[2].getSize()];
col[0].addCol(col[2], 2);

for (int i=0; i < col[2].getSize(); i++)
{
    col_coeff_array[i] = col[0].getCoeff(i);
    col_coeff_chk[i] = 2 * col[2].getCoeff(i);
}

/* Adds a nonzero term. */
col[1].addTerm(c0, 3);
dtmp = col[1].getCoeff(0);

构造函数/析构函数。

MdoCol(void)

默认构造函数。

virtual ~MdoCol(void)

析构函数。

MdoCol(const MdoCol &rhs)

复制构造函数。

Parameters

rhs – 要复制的对象。

基本运算符。

MdoCol &operator=(const MdoCol &rhs)

赋值运算符。

Parameters

rhs – 要复制的对象。

Return

已更新的对象。

用于访问内部数据的函数。

void addCol(const MdoCol &col, MdoReal multipiler)

此函数会将其他列对象添加到自身。

Parameters
  • col – 待添加的列对象。

  • multipiler – 常数乘子。

void addTerm(const MdoCons &cons, MdoReal coeff)

此函数会添加一个非零项。非零项即一对约束和系数。

Parameters
  • cons – 与非零项关联的约束对象。

  • coeff – 非零项的系数。

void addTerms(std::vector<std::reference_wrapper<MdoCons>> &conss, const MdoReal *coeffs, MdoI32 size)

此函数会添加一组非零项。非零项即一对约束和系数。

Parameters
  • conss – 包含对约束对象的引用的矢量对象。

  • coeffs – 包含非零系数的数组。

  • size – 待添加的项数。

const MdoCons &getCons(MdoI32 pos) const

此函数会从列对象中检索约束对象。

Parameters

pos – 当前存储在 pos 位置的项。

Return

约束对象。

MdoCons &getCons(MdoI32 pos)

此函数会从列对象中检索约束对象。

Parameters

pos – 当前存储在 pos 位置的项。

Return

约束对象。

MdoReal getCoeff(MdoI32 pos) const

此函数会从列对象中检索非零元素的值。

Parameters

pos – 当前存储在 pos 位置的项。

Return

非零元素的值。

void removeTerm(MdoI32 pos)

在给定约束索引的情况下,此函数会从列对象中删除非零元素。

Parameters

pos – 当前存储在 pos 位置的项。

MdoBool removeTerm(const MdoCons &cons)

在给定约束对象的情况下,此函数会从列对象中删除非零元素。

Parameters

cons – 将被删除非零系数的约束对象。

Return

如果指定的系数存在于列中并且已被删除,则返回 true。

void clear(void)

此函数会从列对象中删除所有非零元素。

MdoI32 getSize(void) const

此函数会检索存储在列对象中的非零元素数量。

Returns

存储在列对象中的非零元素数量。