IPOPT 选项在 Visual Studio 2022 发布配置中不可设置

问题描述 投票:0回答:1

我目前正在使用 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-3.14.12-win64-msvs2019-mdd.zip[链接:https://github.com/coin-or/Ipopt/releases/tag/releases%2F3.14.12]
  • 我正在为我的解决方案使用发布配置。

如果您能提供有关如何解决此问题并在 IPOPT 优化中成功设置最大迭代次数的见解或建议,我将不胜感激。

谢谢!

c++ optimization terminate ipopt
1个回答
0
投票

IPOPT 有两个可再发行版本,zip 压缩文件,一个用于发布配置,带有 -md 后缀,另一个用于调试,带有 -mdd 后缀。适当地使用它们。

© www.soinside.com 2019 - 2024. All rights reserved.