问题描述
这是我的新库“ Epigraph”中出现的一个问题,该库使用Eigen对凸问题进行建模并与求解程序进行接口。 The original issue on github已经很好地描述了正在发生的事情,但我将总结一下:
我有多个功能模板,这些模板以特征类型为输入,然后按行和列对其进行迭代:
template <typename Derived>
std::vector<Constraint> lessthan(const Scalar &lhs,const Eigen::MatrixBase<Derived> &rhs)
{
std::vector<Constraint> constraints;
for (int row = 0; row < rhs.rows(); row++)
{
for (int col = 0; col < rhs.cols(); coL++)
{
constraints.push_back(lessthan(lhs,rhs(row,col)));
}
}
return constraints;
}
在Eigen类型类似于SparseMatrix-DenseVector产品之前,此方法一直有效。似乎结果表达式的类型为const Eigen::Product<Eigen::SparseMatrix<cvx::Scalar,int>,cvx::VectorX,0>
,并且通过索引对其进行迭代非常慢。
可以通过首先在产品上调用eval()
方法来解决此问题,但这不是用户所期望的。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)