public void reason() {
		myLogger.log(Logger.INFO, "Agent (" + agent.getLocalName() + ") executing reasoning!");
		
		capabilityInterdependency = false;
		decompositionInterdependency = false;
		interestInterdependency = false;
		resourceInterdependency = false;
		knowledgeInterdependency = false;
		
		boolean hasSolution = false;
		
		//candidates = new AID[0];
		candidates = new ArrayList<AID>();
		
		//Clear previous interactions
		this.agent.getInteractions().clear();
		
		//Check to see if a potential solution was generated
		DomainKnowledge dk = this.agent.domain_knowledge;
		
		goal = dk.peekGoal();
		//Find the Goal description
		goalPerformative = goal.split("g=");
		goalDescription = goalPerformative[1].split("\\(");
		g = goalDescription[0];
		
		//Check for the solution
		hasSolution = dk.containsSolution(goal);
		
		//If not, run through pre-interaction
		if(!hasSolution) {
			reasonWhich();
			reasonHow();
		} else {
			//No pre-interaction necessary
			//Transition the mental state (1 -> 2 || Solutions -> Desire)
			this.agent.nextState();
			//Transition the mental state (2 -> 3 || Desire -> Commitment)
			this.agent.nextState();
		}

	}