es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo usar Optaplanner para puntuar solamente una solución existente (un conjunto ordenado de datos) en lugar de buscar una nueva solución?

El problema que quiero resolver es evaluar si el plan de entrada es razonable, por lo que cuando ingreso un conjunto de datos ordenados, espero que Optaplanner pueda puntuar directamente el plan en función de las restricciones que he configurado, y que me informe cuáles restricciones viola el plan actual.

La situación actual es que he completado la parte de modelado refiriéndome al ejemplo de tsp a través de Optaplanner, pero cuando ingreso el conjunto de datos, el resultado es una nueva solución (ordenamiento del plan), y las puntuaciones que se muestran también son para esta nueva solución.

¿Puedo puntuar solo mis datos de entrada en lugar de resolverlos nuevamente? Solo necesito saber si se satisfacen las restricciones de los datos de entrada.
Espero su respuesta, ¡muchas gracias!

Estos son los datos de entrada:
enter image description here

Este es el resultado y la puntuación:
enter image description here
enter image description here

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puedes evaluar los datos de entrada directamente sin resolverlos de nuevo. Optaplanner proporciona un método llamado “score” que puede calcular directamente la puntuación de una solución dada en función de las restricciones configuradas.

    Para usar este método, debes crear un ScoreManager y pasarle tu archivo de configuración de restricciones y una definición de puntuación. Luego, puedes llamar al método score del ScoreManager con tus datos de entrada para obtener la puntuación de los datos de entrada.

    Aquí hay un ejemplo de código:

    // Crea un ScoreManager con tu archivo de configuración de restricciones y una definición de puntuación
    ScoreManager<mysolution, hardmediumsoftscore=""> scoreManager = ScoreManager.create(
            SolverFactory.createFromXmlResource("miArchivoDeConfiguraciónDeRestricciones.xml").buildSolverFactory(),
            constraintPackage -> new HardMediumSoftScoreDefinition().from(constraintPackage));
    
    // Crea tus datos de entrada, por ejemplo:
    MySolution inputPlan = new MySolution();
    // ...
    
    // Llama al método score del ScoreManager con tus datos de entrada para obtener la puntuación
    HardMediumSoftScore score = scoreManager.score(inputPlan);
    

    Esto te dará un objeto de puntuación, que puedes usar para verificar qué restricciones se violan y en qué medida. Por ejemplo, puedes llamar a los métodos getHardScore(), getMediumScore() y getSoftScore() del objeto de puntuación para obtener el número de restricciones duras, intermedias y suaves que se violan, respectivamente.

    Ten en cuenta que para usar el método score, debes tener un objeto de solución válido (es decir, tus datos de entrada deben cumplir todas las restricciones). Si tus datos de entrada violan alguna restricción, obtendrás un objeto de puntuación con una puntuación negativa, que indica el número y la gravedad de las restricciones violadas.</mysolution,>

Comments are closed.