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.

Número de entradas en IloExpr.

Estoy creando un CPLEX LP (C++) y estoy creando restricciones usando IloExpr de la manera habitual. por ejemplo:

IloExpr cons(m_env);

for (auto& pID : values) {

if (pID != -1) {
    cons += variables[pID];
}

}

m_model.add(IloRange(m_env, 0.0, cons, 1.0));

Al final del ciclo, cons puede no tener ninguna variable si todos los valores son -1. Me gustaría verificar esto para evitar agregar una restricción vacía al modelo.

¿Cómo puedo hacer esto?

Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para comprobar si cons tiene alguna variable después del bucle, puedes llamar al método isLinearZero() en cons. Esto devolverá true si la expresión es lineal y su valor constante es cero, lo que significa que no hay variables en la expresión. Luego puedes usar una declaración if para agregar la restricción al modelo solo si la expresión no está vacía.

    Aquí tienes un ejemplo:

    IloExpr cons(m_env);
    
    for (auto& pID : values) {
        if (pID != -1) {
            cons += variables[pID];
        }
    }
    
    if (!cons.isLinearZero()) {
        m_model.add(IloRange(m_env, 0.0, cons, 1.0));
    }
    

    Esto solo agregará la restricción al modelo si cons no está vacío.

Comments are closed.