Hi Arvind,
When you provide an initial point to Knitro via "KN_set_var_primal_init_values()" and enable the multi-start procedure, Knitro uses the provided initial point as the initial point for the first multi-start solve.
You should be able to get access to the initial points generated by Knitro multi-start using the "KN_set_ms_initpt_callback()". See the section "Multi-Start callbacks" here:
From the knitro.h header file:
/** Type declaration for the callback that allows applications to
* specify an initial point before each local solve in the multistart
* procedure. On input, arguments "x" and "lambda" are the randomly
* generated initial points determined by Knitro, which can be overwritten
* by the user. The argument "nSolveNumber" is the number of the
* multistart solve. Return 0 if successful, a negative error code if not.
* Use KN_set_ms_initpt_callback to set this callback function.
*/
typedef int KN_ms_initpt_callback ( KN_context_ptr kc,
const KNINT nSolveNumber,
double * const x,
double * const lambda,
void * const userParams);
/** Return 0 if successful, a negative error code if not.
*/
int KNITRO_API KN_set_ms_initpt_callback (KN_context_ptr kc,
KN_ms_initpt_callback * const fnPtr,
void * const userParams);
I believe if you just access the "x" value passed into "KN_ms_initpt_callback()" this will be the Knitro initial point generated for the next multi-start solve. You can then over-write that "x" if you want to specify your own custom initial point.
Regards,
Richard