public double getOffer(Task newProposedTask) {
		Comparator<node> comparator = new nodeComparator();
		PriorityQueue<node> nodeQueue = new PriorityQueue<node> (1000, comparator);
		ArrayList<node> visitedNodes = new ArrayList<node>();
		ArrayList<ArrayList<Object>> currentState = generateInitState(this.intermediateTaskList);
		node currentNode = new node(vehicle, vehicle.getCurrentCity(), currentState, vehicle.capacity(), 0, null);
		visitedNodes.add(currentNode);
		int i = 0;

		while(!AuctionTemplate.checkGoalState(currentState)) {
			//System.out.println("State: "+currentState);
			ArrayList<node> childQueue = currentNode.expandNodes();
			nodeQueue.addAll(childQueue);
			try{
				currentNode = nodeQueue.remove();
			} catch (Exception e) {
				break;
			}

			visitedNodes.add(currentNode);
			currentState = currentNode.getState();
			i++;
		}

		System.out.println("Iteration: "+i);

		if(AuctionTemplate.checkGoalState(currentState)) {
			System.out.println("ASTAR: GOAL NODE REACHED!");
			double newCosts = currentNode.getCosts();
			double marginalCosts = newCosts - this.lastCosts;
			System.out.println("Marginal costs are: "+marginalCosts);

			// Compute the costs of the opponent
			// Adjust our offer

			this.intermediateGoalNode = currentNode;
			this.intermediateVisitedNodes = visitedNodes;
			this.intermediateCosts = newCosts;

			double offer = marginalCosts;
			if(offer <= 0) {
				offer = this.opponentMinimalBid < 750 ? 750 : this.opponentMinimalBid;
			}
			
			offer = adjustUsingDistribution(offer);
			
			return adjustBiddingOffer(offer);

		} else {
			System.out.println("Node Queue is empty and we haven't found a solution");
			return 10000;
		}
	}