-3

私は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

2 回目の最適化 (2 回目は while に入る) では、ステータス = CPXdualopt (env, lp); でアクセス違反の書き込み場所が示されます。

何か案が?

4

1 に答える 1

2

のドキュメントにCPXgetpiよると:

CPXCENVptr環境

によって返される CPLEX 環境へのポインタCPXopenCPLEX()

CPXCLPptrlp

によって返される CPLEX 問題オブジェクトへのポインタCPXcreateprob()

これらのオブジェクトにポインタを渡していません。あなたはNULL代わりにそれらの両方を渡しています。

ドキュメントにCPXdualoptは、同じ問題が示されています。

于 2013-03-28T22:39:52.487 に答える