Я занимаюсь домашней проблемой, связанной с локальным поиском. Я хотел бы перезапустить поиск, используя новое начальное состояние через некоторое время. Для этого я включил условие времени в мой цикл while.
void run_local_search()
{
while (time(NULL) - timer < (tim * 60) - 1) // tim is some user defined time in minutes. I've initialized timer in my main function right before calling the run_local_search().
{
struct state initial; // Declaring the initial state structure
start_state(&initial); // Generates a random starting state.
if (initial.profit > best.profit)
{
best = initial;
}
local_search(&initial);
}
}
Моя основная функция поиска
void local_search(state* s)
{
clock_t searchtime;
searchtime = clock(); // I initialize the clock right before the search loop here
while ((clock() - searchtime)/CLOCKS_PER_SEC < 2) // I want the loop to run for 2 seconds
{...}
cout << "Done" << endl;
}
Я обнаружил, что начальное состояние структуры; оператор не повторно инициализирует исходную структуру через итерации цикла while. То же самое значение для начального переноса происходит в новой итерации цикла while, поэтому моя функция start_state, которая генерирует случайное значение, оказывается бесполезной! Как я могу это исправить?
Из небольшой информации, которую вы дали, я могу догадаться, что алгоритм должен быть инициализирован один раз, перед циклом минутного времени:
void run_local_search(){
struct state initial;
// start_state(&initial); //moved into loop
while (time(NULL) - timer < (tim * 60) - 1){
start_state(&initial);
if (initial.profit > best.profit){
best = initial;
}
local_search(&initial);
}
}
tim
иtimer
, и как уже упоминалось @OliCharlesworth, лучше иметь минимальные самодостаточные примеры.