当前位置: 首页>>代码示例>>C++>>正文


C++ Objective::getLSQLinearTerms方法代码示例

本文整理汇总了C++中Objective::getLSQLinearTerms方法的典型用法代码示例。如果您正苦于以下问题:C++ Objective::getLSQLinearTerms方法的具体用法?C++ Objective::getLSQLinearTerms怎么用?C++ Objective::getLSQLinearTerms使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Objective的用法示例。


在下文中一共展示了Objective::getLSQLinearTerms方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: setObjective


//.........这里部分代码省略.........
		objFEndTerm << expFEndTermX;

		objEvFxEnd.setup("evFxEnd", NYN, NX, REAL, ACADO_WORKSPACE);
	}

//	objFEndTerm << expFEndTermX;
//	objEvFxEnd.setup("evFxEnd", NYN, NX, REAL, ACADO_WORKSPACE);

	unsigned objFEndTermSize = objFEndTerm.getGlobalExportVariableSize();
	if ( objFEndTermSize > objAuxVar.getDim() )
	{
		objAuxVar.setup(objAuxVar.getName(), objFEndTermSize, 1, REAL, objAuxVar.getDataStruct());
	}

	evaluateLSQEndTerm.init(objFEndTerm, "evaluateLSQEndTerm", NX, 0, 0);
	evaluateLSQEndTerm.setGlobalExportVariable( objAuxVar );

	if (objFEndTerm.getDim() > objF.getDim())
	{
		objValueOut.setup("objValueOut", 1, objFEndTerm.getDim(), REAL, ACADO_WORKSPACE);
	}

	if (objSEndTerm.isGiven() == BT_TRUE && objEvFxEnd.isGiven() == BT_TRUE)
	{
		// Precompute

		Matrix m2, m1;

		m2 = objEvFxEnd.getTranspose().getGivenMatrix() * objSEndTerm.getGivenMatrix();
		m1 = m2 * objEvFxEnd.getGivenMatrix();

		QN1 = m1;
		if (m1 ==  m2)
			QN2 = m1;
		else
			QN2 = m2;
	}
	else if (FEndTermX.isOneOrZero() == NE_ZERO)
	{
		QN1 = zeros(NX, NX);
		QN2 = zeros(NX, NYN);
	}
	else
	{
		QN1.setup("QN1", NX, NX, REAL, ACADO_WORKSPACE);
		QN2.setup("QN2", NX, NYN, REAL, ACADO_WORKSPACE);
	}

	// Both are given or none is given; otherwise give an error.
	if (getNYN() && (objS.isGiven() ^ objSEndTerm.isGiven()))
		return ACADOERRORTEXT(RET_INVALID_OBJECTIVE_FOR_CODE_EXPORT, "All weighting matrices have to be defined (or all undefined)");

	////////////////////////////////////////////////////////////////////////////
	//
	// Setup the linear terms
	//
	////////////////////////////////////////////////////////////////////////////

	std::vector<ExportVariable> vSlx, vSlu;

	_objective.getLSQLinearTerms(vSlx, vSlu);

	if (vSlx.size() > 0 && vSlu.size() > 0)
	{
		if (vSlx.size() != 1 || vSlu.size() != 1)
			return ACADOERROR(RET_INVALID_ARGUMENTS);

		if (vSlx[ 0 ].getDim() > 0)
		{
			if (vSlx[ 0 ].isGiven() && vSlx[ 0 ].getDim() != NX && vSlx[ 0 ].getNumCols() == 1)
				return ACADOERROR(RET_INVALID_ARGUMENTS);

			if (vSlx[ 0 ].isGiven() == BT_TRUE)
				objSlx.setup("Wlx", vSlx[ 0 ].getGivenMatrix(), REAL, ACADO_VARIABLES);
			else
				objSlx.setup("Wlx", NX, 1, REAL, ACADO_VARIABLES);
		}

		if (vSlu[ 0 ].getDim() > 0)
		{
			if (vSlu[ 0 ].isGiven() && vSlu[ 0 ].getDim() != NU && vSlu[ 0 ].getNumCols() == 1)
				return ACADOERROR(RET_INVALID_ARGUMENTS);

			if (vSlu[ 0 ].isGiven() == BT_TRUE)
				objSlu.setup("Wlu", vSlu[ 0 ].getGivenMatrix(), REAL, ACADO_VARIABLES);
			else
				objSlu.setup("Wlu", NU, 1, REAL, ACADO_VARIABLES);
		}
	}

	////////////////////////////////////////////////////////////////////////////
	//
	// Setup the residual variables
	//
	////////////////////////////////////////////////////////////////////////////

	setupResidualVariables();

	return SUCCESSFUL_RETURN;
}
开发者ID:ThomasBesselmann,项目名称:acado,代码行数:101,代码来源:export_nlp_solver.cpp


注:本文中的Objective::getLSQLinearTerms方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。