Example #1
0
void TaskAllocator::readTasks(QString filename){
    QFile file(filename);
    int taskNum = 0;
    completeTasks = 0;
    if(file.open(QIODevice::ReadOnly)){
        QTextStream in(&file);
        while(!in.atEnd()){
            QString line = in.readLine();
            qDebug() << "line read: " << line;
            QStringList task = line.split(",");
            double x = task[0].toDouble();
            double y = task[1].toDouble();
            int r = task[2].toInt();
            int w = task[3].toInt();
            Objective o(x,y,r,w);
            tasks[taskNum] = o;
            tasks[taskNum].setCompleted(false);
            taskNum++;
        }
        file.close();
        taskCount = taskNum;
        currentTask = -1;
        qDebug() << taskCount;
        assignNextTask();
    }else{
        qDebug() << file.errorString();
    }
}
Example #2
0
void TaskAllocator::taskCompleted(int index){
    //tasks[index].setCompleted(true);
    completeTasks++;
    if(completeTasks < taskCount){
        assignNextTask();
    }else{
        emit tasksComplete();
    }
}
Example #3
0
void TaskAllocator::chooseWinner(){
    qDebug() << "choosing winner";
    tasks[currentTask].setCompleted(true);
    int winner = -1;
    int winner2 = -1;
    for(int i = 0; i < MAX_BIDS; i++){
        qDebug() << strengths[i];
        if(strengths[i] >= tasks[currentTask].getWeight() || tasks[currentTask].getRNum() == 2){
                if(bids[i] < bids[winner] || winner == -1){
                    if(tasks[currentTask].getRNum() == 2 && winner > -1){
                        if(strengths[i] + strengths[winner] >= tasks[currentTask].getWeight()){
                            winner2 = winner;
                        }else{
                            continue;
                        }
                    }
                    winner = i;
            }
        }
    }

    for(int i = 0; i < MAX_BIDS; i++){
        bids[i] = 100;
        strengths[i] = 0;
    }
    if(winner == -1 || (tasks[currentTask].getRNum() == 2 && winner2 == -1)){
        tasks[currentTask].setCompleted(false);
        assignNextTask();
    }else {

        activeBots--;
        if(tasks[currentTask].getRNum() == 2){
            activeBots--;
        }

        emit winnerFound(winner+1,winner2+1);
    }
}
Example #4
0
/** the main loop for a task creator */
void TaskCreator::mainLoop(){
	if(!m_initialized){
		#ifdef DEBUG_TASK_CREATOR
		cout<<"Initializing"<<endl;
		#endif
		initializeMethod();
		m_initialized=true;
		m_completedJobs=0;
	}

	if(hasUnassignedTask()){
		if(m_virtualProcessor->canAddWorker()){
			Worker*worker=assignNextTask();


			#ifdef DEBUG_TASK_CREATOR
			cout<<"Adding worker to pool worker= "<<worker<<" processor="<<m_virtualProcessor<<endl;
			#endif

			#ifdef CONFIG_ASSERT
			assert(worker != NULL);
			assert(m_virtualProcessor != NULL);
			#endif

			m_virtualProcessor->addWorker(worker);
	
			/* tell the VirtualProcessor that no more tasks will be created */
			if(!hasUnassignedTask()){
				#ifdef DEBUG_TASK_CREATOR
				cout<<"No more task are coming."<<endl;
				#endif
				m_virtualProcessor->noMoreTasksAreComing();
			}
		}
	}

	Worker*worker=NULL;

	bool aWorkerWorked=m_virtualProcessor->run();


	if(aWorkerWorked){
		worker=m_virtualProcessor->getCurrentWorker();
	}

	if(worker!=NULL && worker->isDone()){
		#ifdef DEBUG_TASK_CREATOR
		cout<<"Current worker is done"<<endl;
		#endif
		processWorkerResult(worker);
		destroyWorker(worker);
		m_completedJobs++;
	}

	if(!hasUnassignedTask() && !m_virtualProcessor->hasWorkToDo()){
		finalizeMethod();

		m_virtualProcessor->printStatistics();
		m_virtualProcessor->reset();

		#ifdef DEBUG_TASK_CREATOR
		cout<<"calling finalizeMethod()"<<endl;
		#endif

	}
}