Initializing help system before first use

Drawing results of multiple optimization runs


Type: Unit commitment
Rating: 3 (intermediate)
Description: This model produces a simple plot of solution values against different amounts for the security reserve, each point of the graph represents the solution to one optimization problem instance.
File(s): a6electrg.mos
Data file(s): a6electr.dat


a6electrg.mos
(!******************************************************
   Mosel Example Problems
   ======================

   file a6electrg.mos
   ``````````````````
   Production of electricity.
   Plotting parametrics in the reserve capacity.
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Oct. 2004, rev. Sep. 2017
*******************************************************!)

model "A-6 Electricity production (with graph drawing)"
 uses "mmxprs", "mmsvg"
 
 declarations
  NT = 7
  TIME = 1..NT                       ! Time periods
  TYPES = 1..4                       ! Power generator types  

  LEN, DEM: array(TIME) of integer   ! Length and demand of time periods 
  PMIN,PMAX: array(TYPES) of integer ! Min. & max output of a generator type
  CSTART: array(TYPES) of integer    ! Start-up cost of a generator
  CMIN: array(TYPES) of integer      ! Hourly cost of gen. at min. output
  CADD: array(TYPES) of real         ! Cost/hour/MW of prod. above min. level
  AVAIL: array(TYPES) of integer     ! Number of generators per type
  Graph: integer                     ! Result graph
  bas: basis                         ! LP basis

  start: array(TYPES,TIME) of mpvar  ! No. of gen.s started in a period
  work: array(TYPES,TIME) of mpvar   ! No. of gen.s working during a period
  padd: array(TYPES,TIME) of mpvar   ! Production above min. output level
 end-declarations
 
! Time period data
 LEN:: [    6,     3,     3,     2,     4,     4,     2]
 DEM:: [12000, 32000, 25000, 36000, 25000, 30000, 18000]

! Power plant data
 PMIN::   [ 750, 1000, 1200, 1800]
 PMAX::   [1750, 1500, 2000, 3500]
 CSTART:: [5000, 1600, 2400, 1200]
 CMIN::   [2250, 1800, 3750, 4800]
 CADD::   [ 2.7,  2.2,  1.8,  3.8]
 AVAIL::  [  10,    4,    8,    3]
 
 
! Objective function: total daily cost 
 Cost:= sum(p in TYPES, t in TIME) (CSTART(p)*start(p,t) +
          LEN(t)*(CMIN(p)*work(p,t) + CADD(p)*padd(p,t))) 
                                   
! Number of generators started per period and per type
 forall(p in TYPES, t in TIME) 
  NumStart(p,t):= start(p,t) >= work(p,t) - if(t>1, work(p,t-1), work(p,NT))

! Limit on power production above minimum level
 forall(p in TYPES, t in TIME) 
  Limit(p,t):= padd(p,t) <= (PMAX(p)-PMIN(p))*work(p,t)

! Satisfy demands
 forall(t in TIME) 
  Demand(t):= sum(p in TYPES) (PMIN(p)*work(p,t) + padd(p,t)) >= DEM(t)

! Security reserve (reserve initially at 0%)
 forall(t in TIME) 
  Reserve(t):= sum(p in TYPES) PMAX(p)*work(p,t) >= DEM(t)

! Limit number of available generators; numbers of generators are integer
 forall(p in TYPES, t in TIME) do
  work(p,t) <= AVAIL(p)
  work(p,t) is_integer
 end-do


! Uncomment the following line to see the Optimizer log
! setparam("XPRS_verbose", true)

! Solve as an LP problem and save the basis
 setparam("XPRS_PRESOLVE", 0)
 minimize(XPRS_LPSTOP, Cost)
 savebasis(bas)
 setparam("XPRS_PRESOLVE", 1)

! Define a user graph
 svgaddgroup("Graph", "Reserve %")

! Solve the problem with different values of reserve (from 0% to 20%) 
 forall(r in 0..20) do
  forall(t in TIME)                   ! Redefine the reserve constraints
   Reserve(t):= sum(p in TYPES) PMAX(p)*work(p,t) >= (1+r/100)*DEM(t)

  loadprob(Cost)                      ! Load problem into the Optimizer
  loadbasis(bas)                      ! Load the saved basis
  minimize(Cost)                      ! Solve the modified problem

  writeln(r, "%: ", getobjval)        ! Print solution value
  svgaddpoint("Graph", r, getobjval/1000)  ! Display solution in user graph
 end-do

! Scale the size of the displayed graph
 svgsetgraphscale(10)
 svgsetgraphpointsize(3)
 svgsetgraphlabels("Reserve %", "Cost")

 svgsave("a6electr.svg")
 svgrefresh
 svgwaitclose("Close browser window to terminate model execution.", 1)
end-model

© 2001-2019 Fair Isaac Corporation. All rights reserved. This documentation is the property of Fair Isaac Corporation (“FICO”). Receipt or possession of this documentation does not convey rights to disclose, reproduce, make derivative works, use, or allow others to use it except solely for internal evaluation purposes to determine whether to purchase a license to the software described in this documentation, or as otherwise set forth in a written software license agreement between you and FICO (or a FICO affiliate). Use of this documentation and the software described in it must conform strictly to the foregoing permitted uses, and no other use is permitted.