Witam!
Koduję algorytm Neh'a dla problemu szeregowania zadań na maszynach. Program ma sobie radzić z przykładami Tailarda. Pliki mają postać:
Ogólnie - w pierwszym wierszu znajduje się liczba zadan i liczba maszyn. Każda kolejna linia opisuje jedno zadanie w postaci: nr_maszyny czas_wykonywania nr_maszyny czas_wykonywania.
Ogólnie algorytm jest prosty i został już zaimplementowany. Po podaniu sciezki do pliku rozwiązuje zadanie. Prowadzący jednak chce zebrane wyniki w jednym pliku wynikowym dla 120 zadań. Plik ma mieć postać:
nazwa przykładu
permutacja
Cmax
czas obliczen
...
Łaczny czas obliczen wszystkich przykladow
Wrzuciłem więc kod w pętlę:
int main(){
int iMach,iJobs,iTemp,iTemp2;
string strPath;
ifstream File;
ostringstream strTemp;
ofstream OutFile;
double dTime=0;
OutFile.open("output.txt");
for(int k=1;k<=120;k++){
strTemp.str("");
strTemp<<"dane/ta";
if(k<10) strTemp<<"00";
else if(k<100)strTemp<<'0';
strTemp<<k<<".txt";
strPath=strTemp.str();
File.open(strPath.c_str());
File >> iJobs;
File >> iMach;
{
CNeh Task(iJobs,iMach);
for(int i=0;i<iJobs;i++){
for(int j=0;j<iMach;j++){
File >> iTemp;
File >> Task.Data[i][j];
}
}
File.close();
Task.FindSolution();
dTime=dTime+Task.GetDouration();
OutFile<<"ta";
if(k<10) OutFile<<"00"; else if(k<100)OutFile<<'0';
OutFile<<k<<" - wyniki:\n";
OutFile<<"Permutacja: "<<Task.GetPermutation()<<'\n';
OutFile<<"Cmax: "<<Task.GetCmax()<<'\n';
OutFile<<"Czas obliczen: "<<Task.GetDouration()<<" sec\n";
}
OutFile<<"---------------------------------------------------\n";
}
OutFile<<"Czas wykonywania wszystkich obliczen: "<<dTime<<'\n';
OutFile.close();
system("PAUSE");
return EXIT_SUCCESS;
}
Idea była taka, że:
- Buduję nazwę pliku do otwarcia i otwieram tenże (działa)
- Tworzę obiekt klasy CNeh, wykonuję obliczenia, wyniki wrzucam do przez ofstream do pliku.
- Niszczę obiekt Task
- wracam do 1.
I pojawił się pewien problem. Niezależnie od tego ile zadań ma przykład, to rozmiar obiektu Task klasy CNeh ma zawsze ten sam rozmiar (rozmiar z pierwszego przykładu).
W jaki sposób zapisać to poprawnie? Bo na razie, tak jakby, obiekt nie jest niszczony po przejsciu kazdego przebiegu petli.
Pzdr.,
Kamil