Exemple #1
0
void listClean(struct entityList *list)
{
	if(list->next != NULL){
		listClean(list->next);
	}
	free(list);
}
Exemple #2
0
void cleanUp(Firm ** firm, Employee ** employees, Employee *** sortedEmployees)
{
	Employee * employeesList = *employees;
	const int sortedListArrayListSize = listGetSize((*firm)->skills, sizeof(Skill));

	/* Clean up the employeesList lists */
	while(employeesList)
	{
		listClean((void **) &(employeesList->wishes), sizeof(Wish));
		employeesList = employeesList->nextEmployee;
	}

	listClean((void **) employees, sizeof(Employee));

	/* Clean sorted ArrayList of Employees */
	int sortedEmployessCounter = 0;
	for(; sortedEmployessCounter < sortedListArrayListSize; sortedEmployessCounter++)
	{
		listClean((void **) *sortedEmployees + sortedEmployessCounter, sizeof(Skill));
	}

	free(*sortedEmployees);
	*sortedEmployees = NULL;

	/* Clean firm */
	listClean((void **) &((*firm)->emptySchedule), sizeof(Shift));
	listClean((void **) &((*firm)->ranks), sizeof(Rank));
	listClean((void **) &((*firm)->skills), sizeof(Skill));

	free(*firm);
	*firm = NULL;
}
Exemple #3
0
int main(int argc, char *argv[])
{
	/* Save start time of program for later use */
	const time_t startTime = time(NULL);

	srand(startTime);

	/* Create pointers to manipulate with */
	Firm * firm = (Firm *) calloc(1, sizeof(Firm));

	Employee* employees = NULL;
	Employee ** sortedEmployes;

	/* Loads data from the file in the correct file in the correct directory */
	char runPath[strlen(argv[0]) + 20];
	getRunPath(argv[0], runPath);

	loadDataFromFile(firm, &employees, runPath);

	sortedEmployes = sortEmployeesBy(employees, firm->skills);

	int validCounter = 0;
	int randomCounter;

	float highestScore = 0;

	firm->bestSchedule = generateBestRandomSchedule(firm, employees, sortedEmployes, &randomCounter, &validCounter);

	if(!firm->bestSchedule)
	{
		printf("Error, no result from random generation\n");
		exit(-1);
	}

	highestScore = genScore(firm, firm->bestSchedule, employees);

	//int swapsTries;

	/**
	 * findBestRoughSwap
	 */
	firm->bestSchedule = findBestRoughSwap(firm, firm->bestSchedule, employees, &highestScore);

	/**
	 * fineSwap
	 */

	findBestFineSwap(firm, &(firm->bestSchedule), employees, &highestScore);


	Shift * tmpShift = listCopy((void*) firm->bestSchedule, sizeof(Shift));

	Employee * unassignedEmployeeList = generateUnassignedEmployeeList(tmpShift, employees);

	assignEmployeeListRandomly(tmpShift, employees, &unassignedEmployeeList);

	tmpShift = findBestRoughSwap(firm, tmpShift, employees, &highestScore);

	findBestFineSwap(firm, &tmpShift, employees, &highestScore);

	if(isValid(tmpShift, employees) && genScore(firm, firm->bestSchedule, employees) < highestScore)
	{
		listClean((void **) &(firm->bestSchedule), sizeof(Shift));
		firm->bestSchedule = tmpShift;
	}
	else
	{
		listClean((void **) &tmpShift, sizeof(Shift));
	}

	printHLine(129);
	printf("PRINTING BEST SCHEDULE (THAT I FOUND) - BY THE WAY, THE BEST SCORE WAS: %f\n", highestScore);
	printHLine(129);
	if(printScheduleHeadline(""))
	{
		printSchedule(firm->bestSchedule, employees);
	}
	printHLine(129);

	/**
	 * TODO: Clean bedstscore osv.
	 */

	cleanUp(&firm, &employees, &sortedEmployes);

	return EXIT_SUCCESS;
}