我目前正在使用 C++ 和 Visual Studio 2022 中的 IPOPT 来解决优化问题。我正在使用 IPOPT 提供的 HS071_NLP 示例,我想使用以下代码来限制迭代次数:
#include "IpIpoptApplication.hpp"
#include "hs071_nlp.hpp"
#include "ipoptOptimizer.h"
#include <iostream>
using namespace Ipopt;
int main()
{
SmartPtr<TNLP> mynlp = new HS071_NLP();
SmartPtr<IpoptApplication> app = IpoptApplicationFactory();
Ipopt::SmartPtr<Ipopt::OptionsList> options_list = app->Options();
try {
app->Options()->SetIntegerValue("max_iter", 500);
}
catch (std::exception e) {
std::cerr << "Exception while setting max_iter: " << e.what() << std::endl;
return 1;
}
ApplicationReturnStatus status;
status = app->Initialize();
if( status != Solve_Succeeded )
{
std::cout << std::endl << std::endl << "*** Error during initialization!" << std::endl;
return (int) status;
}
status = app->OptimizeTNLP(mynlp);
if( status == Solve_Succeeded )
{
std::cout << std::endl << std::endl << "*** The problem solved!" << std::endl;
}
else
{
std::cout << std::endl << std::endl << "*** The problem FAILED!" << std::endl;
}
return (int) status;
}
当我注释掉这一行时,代码工作正常:
// app->Options()->SetIntegerValue("max_iter", 50);
但是当我取消注释时,我收到以下输出:
尝试设置选项:└t♂ä█uHç§zJ。这不是一个有效的选项。请检查可用选项列表。
此外,其他没有任何变化,并且优化在 50 次迭代后继续。
以下是一些其他详细信息:
如果您能提供有关如何解决此问题并在 IPOPT 优化中成功设置最大迭代次数的见解或建议,我将不胜感激。
谢谢!
IPOPT 有两个可再发行版本,zip 压缩文件,一个用于发布配置,带有 -md 后缀,另一个用于调试,带有 -mdd 后缀。适当地使用它们。