# [Ipopt] ipopt - Multiple calls

Suresh Pamujula suresh.pamujula at gmail.com
Tue Apr 21 21:33:09 EDT 2009

```More on multiple calls to IpoptSolve(...)

I get following error when the function is invoked second time.

EXIT: Converged to a point of local infeasibility. Problem may be
infeasible.

Attached is the code for your quick reference.

Here is code snippet ......

.................
.................
Index j;                             /* generic counter */

for (j=0;j<10;j++) {  /* Basically want to execute IpoptSolve 10 times
with different values on constraints */

/* Number of nonzeros in the Jacobian of the constraints */
Index nele_jac = 6;
/* Number of nonzeros in the Hessian of the Lagrangian (lower or
upper triangual part only) */
Index nele_hess = 6;
/* indexing style for matrices */
Index index_style = 0; /* C-style; start counting of rows and column
indices at 0 */

/* set the number of variables and allocate space for the bounds */
n=3;
x_L = (Number*)malloc(sizeof(Number)*n);
x_U = (Number*)malloc(sizeof(Number)*n);
/* set the values for the variable bounds */
for (i=0; i<n; i++) {
x_L[i] = 0.0;
x_U[i] = 1.0;
}

/* set the number of constraints and allocate space for the bounds */
m=2;
g_L = (Number*)malloc(sizeof(Number)*m);
g_U = (Number*)malloc(sizeof(Number)*m);

/* set the values of the constraint bounds */
g_L[0] = 0.065 + j*0.05;  /* increment return by 5% */
g_U[0] = 2e19;
g_L[1] = 1;
g_U[1] = 1;

/* create the IpoptProblem */
nlp = CreateIpoptProblem(n, x_L, x_U, m, g_L, g_U, nele_jac, nele_hess,
&eval_jac_g, &eval_h);

/* We can free the memory now - the values for the bounds have been
copied internally in CreateIpoptProblem */
free(x_L);
free(x_U);
free(g_L);
free(g_U);

/* Set some options.  Note the following ones are only examples,
they might not be suitable for your problem. */

/* allocate space for the initial point and set the values */
x = (Number*)malloc(sizeof(Number)*n);
x[0] = 0.2;
x[1] = 0.4;
x[2] = 0.4;

/* allocate space to store the bound multipliers at the solution */
mult_x_L = (Number*)malloc(sizeof(Number)*n);
mult_x_U = (Number*)malloc(sizeof(Number)*n);

/* solve the problem */
status = IpoptSolve(nlp, x, NULL, &obj, NULL, mult_x_L, mult_x_U, NULL);

if (status == Solve_Succeeded) {
printf("\n\nSolution of the primal variables, x\n");
for (i=0; i<n; i++) {
printf("x[%d] = %e\n", i, x[i]);
}

printf("\n\nSolution of the bound multipliers, z_L and z_U\n");
for (i=0; i<n; i++) {
printf("z_L[%d] = %e\n", i, mult_x_L[i]);
}
for (i=0; i<n; i++) {
printf("z_U[%d] = %e\n", i, mult_x_U[i]);
}

printf("\n\nObjective value\n");
printf("f(x*) = %e\n", obj);
}

/* free allocated memory */
FreeIpoptProblem(nlp);
free(x);
free(mult_x_L);
free(mult_x_U);
}

...........................
...........................
..........................

On Tue, Apr 21, 2009 at 11:57 AM, Suresh Pamujula <suresh.pamujula at gmail.com
> wrote:

> On 4/20/09, Suresh Pamujula <suresh.pamujula at gmail.com> wrote:
> > Hello -
> >
> > I want to inquire if there is a way to invoke functions
> >
> > CreateIpoptProblem(....)
> > and
> > IpoptSolve(...)
> >
> > multiple times with different lower bound on one of the constraints.
> >
> >
> >
> > I tried to call within a for loop, but it gives me "infeasible solution"
> > when it
> > is invoked second time.
> >
> >
> > Any help is truly appreciated.
> >
> >
> >
> > suresh
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://list.coin-or.org/pipermail/ipopt/attachments/20090421/b917c048/attachment.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: hs071_c.c
Type: text/x-csrc
Size: 7639 bytes
Desc: not available
Url : http://list.coin-or.org/pipermail/ipopt/attachments/20090421/b917c048/attachment.bin
```