Я новичок в c ++ и cplex, поэтому любая помощь будет принята с благодарностью.
Проблема: я запускаю код генерации столбца. Мой код выглядит так:
CPXENVptr *env = NULL;
CPXLPptr *lp= null;//---------COLUMN GENERATION BEGINS--------------------------------------------
printf("\nStarting column generation.\n");
num_iterations = 0;
total_cols_generated = 0;
while(1)
{
// we are about to do another pricing iteration
num_iterations++;// get dual prices
status=CPXgetpi(env,lp,dual_value,0,num_customers-1);
if (status)
{
fprintf(stderr,"CPXgetpi Failed.\n");
goto TERMINATE;
}
// call pricing routine
printf ("\nPricing iteration %u.\n", num_iterations);
cols_generated = generate_column(env, lp, num_nodes, num_customers, TT, service_time, start_of_window, end_of_window, out_degree, neighbour, arc_cost, arc_time, dual_value);
total_cols_generated += cols_generated;
if (cols_generated == 0)
break;
// re-optimize the master problem
printf("Re-optimising master LP.\n");
status = CPXdualopt (env, lp);
if ( status ) {
printf ("Failed to re-optimize master LP.\n");
getchar();
goto TERMINATE;
}
// get objective value
status = CPXgetobjval (env, lp, &lower_bound);
if ( status ) {
fprintf (stderr,"Failed to obtain objective value.\n");
goto TERMINATE;
}
// print stuff to screen
printf ("Current cost of RMP solution is %.3f\n", lower_bound);
printf ("\nPress a key\n");
getchar();
} // end while
На второй Оптимизации (второй раз в то время как) это дает место записи Нарушения Доступа в статусе = CPXdualopt (env, lp) ;.
Любая идея?
Согласно документация для CPXgetpi
:
CPXCENVptr
окрУказатель на среду CPLEX, возвращаемый
CPXopenCPLEX()
,
CPXCLPptr
Л.П.Указатель на проблемный объект CPLEX, возвращаемый
CPXcreateprob()
,
Вы не передаете указатели на эти объекты. Вы проходите NULL
вместо этого для них обоих.
документация для CPXdualopt
показывает ту же проблему.
Других решений пока нет …