public void TomarDecision()
    {
        Debug.Log("La ia comienza su analisis");
        List <GameObject> ComponentesDisponiblesAux = new List <GameObject> ();
        ComponenteInsulto ultimoAux, penultimoAux;

        if (!QuedanComponentesValidos(ComponentesDisponibles, ultimo, penultimo, count))
        {
            partida.BotonTerminarRed();
            Debug.Log("LA IA TERMINA SU TURNO");
            return;
        }
        Debug.Log("AUN QUEDAN COMPONENTES ELEGIBLES");
        for (int i = 0; i < Constantes.GENERACIONES; i++)
        {
            Debug.Log("Busqueda de la solucion " + (i + 1));
            ComponentesDisponiblesAux.Clear();
            ComponentesDisponiblesAux.AddRange(ComponentesDisponibles);
            SolucionActual.Clear();
            ultimoAux    = ultimo;
            penultimoAux = penultimo;
            do
            {
                GameObject tmp = ComponentesDisponiblesAux[Random.Range(0, ComponentesDisponiblesAux.Count)];
                if (partida.RevisorGramatical(tmp.GetComponent <ComportamientoComponente>().Componente, ultimoAux, penultimoAux, count + SolucionActual.Count))
                {
                    tmp = EncuentraConDebilidad(ComponentesDisponiblesAux, tmp);                   //priorizar debilidades
                    ComponentesDisponiblesAux.Remove(tmp);
                    penultimoAux = ultimoAux;
                    ultimoAux    = tmp.GetComponent <ComportamientoComponente>().Componente;
                    SolucionActual.Add(tmp);
                }
            }while(QuedanComponentesValidos(ComponentesDisponiblesAux, ultimoAux, penultimoAux, count + SolucionActual.Count));
            int dano = calcularDano(SolucionActual);
            //Debug.Log ("Componentes en solucion " + (i + 1) + " antes: " + SolucionActual.Count+"\nDano en solucion " + (i + 1) + ": " + dano);
            int tipoUltimo = SolucionActual [SolucionActual.Count - 1].GetComponent <ComportamientoComponente> ().Componente.tipo_componente;
            while (SolucionActual.Count > 0)
            {
                tipoUltimo = SolucionActual [SolucionActual.Count - 1].GetComponent <ComportamientoComponente> ().Componente.tipo_componente;
                if (tipoUltimo != Constantes.SUJETO && tipoUltimo != Constantes.INSULTO_SIM)
                {
                    SolucionActual.RemoveAt(SolucionActual.Count - 1);
                }
                else
                {
                    break;
                }
            }
            dano = calcularDano(SolucionActual);
            //Debug.Log ("Componentes en solucion " + (i + 1) + " despues: " + SolucionActual.Count+"\nDano en solucion " + (i + 1) + ": " + dano);
            if (dano > dano_max)
            {
                MejorSolucion.Clear();
                MejorSolucion.AddRange(SolucionActual);
                dano_max = dano;
            }
        }

        if (MejorSolucion.Count > 0)
        {
            EmitirSenalBotonDe(MejorSolucion [0]);
        }
        else
        {
            partida.BotonTerminarRed();
            Debug.Log("LA IA TERMINA SU TURNO");
        }
    }