public void action() {

			switch (step) {
			case 0:
				//enviar cfp a las agencias
				ACLMessage cfp = new ACLMessage(ACLMessage.CFP);
				for (int i = 0; i < agencias.length; ++i) {
					cfp.addReceiver(agencias[i]);
				}

				//renombro por facilidad
				String[] r1 = requerimientoTuristaLugar;
				String[] r2 = requerimientoTuristaTransporte;
				String contenido = r1[0]+"@"+r1[1]+"@"+r1[2]+"@"+r1[3]+"@"+r1[4]+"---";
				contenido = contenido + r2[0]+"@"+r2[1]+"@"+r2[2]+"@"+r2[3]+"@"+r2[4];

				cfp.setContent(contenido);
				cfp.setConversationId("agencia-trade");
				cfp.setReplyWith("cfp"+System.currentTimeMillis()); // Unique value
				myAgent.send(cfp);
				// Prepare the template to get proposals
				mt = MessageTemplate.and(MessageTemplate.MatchConversationId("agencia-trade"),
						MessageTemplate.MatchInReplyTo(cfp.getReplyWith()));
				step = 1;
				break;
			
			case 1:
				// Se reciben propose o refuse de las agencias
				ACLMessage reply = myAgent.receive(mt);
				if (reply != null) {
					// Respuesta recibida
					if (reply.getPerformative() == ACLMessage.PROPOSE) {
						// Se trata de una oferta
						float valorOferta = this.calcularValorOferta(reply.getContent());
						if (mejorAgencia == null || valorOferta > this.calcularValorOferta(mejorOferta)) {
							// Esta es la mejor oferta hasta ahora
							mejorOferta= reply.getContent();
							mejorAgencia = reply.getSender();
						}
					}
					cantRespuestas++;
					if (cantRespuestas >= agencias.length) {
						// se recibieron todas las respuestas de las agencias
						step = 2; 
					}
				}
				else {
					block();
				}
				break;
			
			case 2:
				// Enviar el acept a la agencia que gano
				ACLMessage order = new ACLMessage(ACLMessage.ACCEPT_PROPOSAL);
				order.addReceiver(mejorAgencia);
				order.setContent(mejorOferta);
				order.setConversationId("agencia-trade");
				order.setReplyWith("acept"+System.currentTimeMillis());
				myAgent.send(order);
                                step = 3;
				break;
			}
		}