Decision Optimization

Decision Optimization

Delivers prescriptive analytics capabilities and decision intelligence to improve decision-making.

 View Only
  • 1.  not positive semi-definite error

    Posted Thu February 02, 2012 08:54 AM

    Originally posted by: pbsophie


    I'm having an issue with my model. I keep getting the error listed in my subject. Can anyone help? Below is my program:
    //Parameters:
    int nbJobs = ...;
    int nbFamilies = ...;

    //Ranges
    range Jobs = 1..nbJobs;
    range Families = 1..nbFamilies;
    range Batches = 1..nbJobs;

    float EarlyCost = ...;
    float TardyCost = ...;
    float duedateJobs=...;
    float Batch_minFamilies=...;
    float Batch_maxFamilies=...;
    float processJobsFamilies=...;
    float setupFamilies=...;
    float releaseJobs=...;

    //Decision Variables
    dvar float+ start_timeBatches;
    dvar int+ number_batchFamiliesBatches;
    dvar float+ EarlinessJobs;
    dvar float+ TardinessJobs;
    dvar float+ CompletionJobs;
    dvar int+ XJobsFamiliesBatches in 0..1;
    dvar int+ YFamiliesBatches in 0..1;
    dvar float+ processBFamiliesBatches;
    dvar float+ CompletionBBatches;
    //objective
    minimize
    sum(i in Jobs)(EarlyCost * Earliness[i]+TardyCost * Tardiness[i]);
    //constraints
    subject to {
    forall (i in Jobs){
    c1: Earliness[i] >= duedate[i] - Completion[i];
    c2: Tardiness[i] >= Completion[i]-duedate[i];
    c3: duedate[i]== Completion[i] + Earliness[i]-Tardiness[i];
    }
    forall (f in Families, k in Batches){
    c7: number_batch[f][k]>=Batch_min[f];
    c8: number_batch[f][k]<=Batch_max[f];
    c9: start_time[k] <= CompletionB[k]-processB[f][k];
    c10: sum(f in Families)
    Y[f][k]==1;
    }

    forall (i in Jobs, k in Batches, f in Families) {
    c13: number_batch[f][k]==sum(f in Families)(X[i][f][k]);
    c14: processB[f][k] == (number_batch[f][k] * process[i][f]) + setup[f];
    c15: X[i][f][k] == Y[f][k];
    c20: sum(k in Batches)
    X[i][f][k]==1;
    c4: start_time[k] >= release[i]*X[i][f][k];
    forall (f in Families) {
    c11: CompletionB[1]==sum(f in Families)(processB[f][1]*Y[f][1])+start_time[1];
    }

    forall (f in Families, k in 2..nbJobs){
    c12: CompletionB[k]==start_time[k]+sum(f in Families)(processB[f][k]*Y[f][k]);
    }
    c6: Completion[i]==CompletionB[k]*X[i][f][k];

    }

    c16: start_time[1]==CompletionB[1];
    forall (k in 2..nbJobs){
    c17: start_time[k] >= CompletionBk-1;
    }
    //bounds
    forall (i in Jobs) {
    Earliness[i]>=0;
    Tardiness[i]>=0;
    Completion[i]>=0;
    }
    forall (k in Batches){
    CompletionB[k]>=0;
    start_time[k]>= 0;
    }
    forall (i in Jobs, f in Families, k in Batches) {
    0<=X[i][f][k]<=1;
    }
    forall (f in Families, k in Batches){
    0<=Y[f][k]<=1;
    number_batch[f][k]>=0;
    processB[f][k]>=0;
    }
    }
    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 2.  Re: not positive semi-definite error

    Posted Mon February 20, 2012 03:35 AM

    Originally posted by: SystemAdmin


    Your model has several constraints that involve the products of variables:
    c14: processB[f][k] == (number_batch[f][k] * process[i][f]) + setup[f];
    c11: CompletionB[1]==sum(f in Families)(processB[f][1]*Y[f][1])+start_time[1];
    c12: CompletionB[k]==start_time[k]+sum(f in Families)(processB[f][k]*Y[f][k]);
    c6: Completion[i]==CompletionB[k]*X[i][f][k];
    

    The CPLEX solver can only handle these constraints if the constraints are positive semi-definite.
    See also the sections about semi-definiteness and second order cone programming in the CPLEX manual.
    If you have more trouble with the semi-definiteness of your constraints then I suggest to re-post the question in the CPLEX forum and explain why you cannot manage to turn the constraints into ones that are positive semi-definite.
    #DecisionOptimization
    #OPLusingCPLEXOptimizer