SlideShare a Scribd company logo
1 of 22
Download to read offline
 
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
i	
  M	
  P	
  l	
  
	
  
Industrial	
  Modeling	
  &	
  Programming	
  Language	
  
	
  
“Console	
  Manual"	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
i	
  n	
  d	
  u	
  s	
  t	
  r	
  I	
  A	
  L	
  g	
  o	
  r	
  i	
  t	
  h	
  m	
  s	
  	
  LLC.	
  
www.industrialgorithms.com	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
Version	
  1.0	
  
April	
  2014	
  
IAL-­‐IMPL-­‐CM-­‐1-­‐0.docx	
  
	
  
	
  
Copyright	
  and	
  Property	
  of	
  Industrial	
  Algorithms	
  LLC.	
   	
  
Introduction	
  
	
  
The	
  IMPL	
  console	
  executable	
  (IMPL.exe)	
  can	
  be	
  called	
  from	
  any	
  DOS	
  command	
  prompt	
  window	
  where	
  
its	
  Intel	
  Fortran	
  source	
  code	
  can	
  be	
  found	
  in	
  Appendix	
  A.	
  	
  The	
  IMPL	
  console	
  is	
  useful	
  given	
  that	
  it	
  allows	
  
you	
  to	
  model	
  and	
  solve	
  problems	
  configured	
  in	
  an	
  IML	
  (Industrial	
  Modeling	
  Language)	
  file.	
  	
  Problems	
  
coded	
  using	
  IPL	
  (Industrial	
  Programming	
  Language)	
  in	
  many	
  computer	
  programming	
  languages	
  can	
  use	
  
the	
  IMPL	
  console	
  source	
  code	
  as	
  a	
  prototype.	
  
	
  
The	
  IMPL	
  console	
  reads	
  several	
  input	
  files	
  and	
  writes	
  several	
  output	
  files	
  which	
  are	
  described	
  in	
  this	
  
document.	
  	
  There	
  are	
  several	
  console	
  flags	
  that	
  can	
  be	
  specified	
  as	
  command	
  line	
  arguments	
  and	
  are	
  
described	
  below.	
  
	
  
IMPL	
  Console	
  Flags	
  
	
  
There	
  are	
  twelve	
  (12)	
  flags	
  or	
  command	
  line	
  arguments	
  that	
  can	
  be	
  specified	
  and	
  they	
  are	
  as	
  follows	
  
with	
  their	
  respective	
  possible	
  values	
  and	
  defaults	
  (shown	
  in	
  bolded	
  italics).	
  
	
  
-feed = IMLfile
The	
  feed	
  flag	
  value	
  must	
  specify	
  the	
  path	
  and	
  file	
  name	
  (without	
  the	
  *.iml	
  extension	
  or	
  file	
  type)	
  of	
  the	
  
IML	
  file	
  to	
  be	
  modeled	
  and	
  solved.	
  	
  
	
  
-form = sparsic | symbolic
For	
  linear	
  problems,	
  the	
  form	
  flag	
  values	
  of	
  sparsic	
  and	
  symbolic	
  are	
  equivalent	
  given	
  that	
  the	
  
problem	
  matrix	
  has	
  no	
  nonlinear	
  or	
  non-­‐constant	
  derivatives	
  or	
  expressions	
  and	
  IMPL	
  supplies	
  all	
  of	
  the	
  
first-­‐order	
  partial	
  derivatives	
  or	
  coefficients	
  analytically.	
  	
  For	
  nonlinear	
  problems,	
  IMPL	
  represents	
  the	
  
model	
  in	
  a	
  “sparsic”	
  form	
  where	
  only	
  the	
  sparsity-­‐pattern	
  is	
  supplied	
  by	
  IMPL	
  for	
  each	
  constraint	
  and	
  
numerical	
  perturbations	
  are	
  used	
  to	
  compute	
  the	
  non-­‐constant	
  or	
  nonlinear	
  first-­‐order	
  partial	
  
derivatives	
  using	
  machine-­‐coded	
  constraint	
  residual	
  calculations	
  i.e.,	
  the	
  constraint	
  equations	
  are	
  hard-­‐
coded	
  into	
  IMPL’s	
  native	
  computer	
  programming	
  language.	
  	
  However,	
  IMPL	
  also	
  supports	
  a	
  “symbolic”	
  
form	
  whereby	
  the	
  constraint	
  residual	
  calculations	
  are	
  computed	
  using	
  nonlinear	
  expressions	
  supplied	
  by	
  
IMPL	
  in	
  a	
  byte-­‐coded	
  or	
  parsed	
  tokenized	
  format	
  sometimes	
  referred	
  to	
  as	
  postfix	
  or	
  reverse	
  Polish	
  
notation	
  (RPN).	
  	
  The	
  “symbolic”	
  form	
  is	
  useful	
  given	
  that	
  it	
  can	
  be	
  used	
  to	
  output	
  the	
  nonlinear	
  
constraint	
  expressions	
  into	
  a	
  human-­‐readable	
  flat-­‐file.	
  
	
  
-fit = discrete | distributed
The	
  fit	
  flag	
  value	
  of	
  discrete assumes	
  a	
  uniform	
  digitization	
  of	
  time	
  i.e.,	
  discrete-­‐time	
  with	
  a	
  single	
  
time-­‐period	
  duration	
  and	
  can	
  be	
  applied	
  to	
  quantity,	
  logistics	
  and	
  quality	
  types	
  of	
  problems	
  whereas	
  the	
  
distributed	
  fit	
  flag	
  value	
  is	
  not	
  valid	
  for	
  logistics	
  problems	
  at	
  this	
  time.	
  	
  IMPL’s	
  distributed-­‐time	
  
formulation	
  is	
  similar	
  to	
  a	
  continuous-­‐time	
  model	
  with	
  a	
  common	
  or	
  global	
  time-­‐grid	
  except	
  that	
  in	
  the	
  
former	
  the	
  time-­‐points	
  are	
  known	
  exogenously.	
  
	
  
-filter = quantity | logistics | quality
The	
  filter	
  flag	
  value	
  of	
  quantity	
  assumes	
  that	
  all	
  logic	
  variables	
  are	
  fixed	
  to	
  either	
  0	
  (zero)	
  or	
  1	
  (one)	
  
and	
  there	
  are	
  no	
  quality	
  variables	
  present	
  and	
  solves	
  a	
  linear	
  programming	
  (LP)	
  problem.	
  	
  The	
  filter	
  flag	
  
value	
  of	
  logistics	
  solves	
  a	
  mixed-­‐integer	
  linear	
  programming	
  (MILP)	
  problem	
  where	
  the	
  logic	
  variables	
  
are	
  finite	
  i.e.,	
  lie	
  between	
  0	
  or	
  1.	
  	
  The	
  filter	
  flag	
  value	
  of	
  quality	
  solves	
  a	
  nonlinear	
  programming	
  (NLP)	
  
problem	
  where	
  the	
  logic	
  variables	
  must	
  be	
  fixed	
  to	
  either	
  0	
  or	
  1.	
  	
  A	
  fourth	
  filter	
  flag	
  value	
  of	
  
qualogistics	
  is	
  possible	
  but	
  is	
  not	
  available	
  where	
  this	
  would	
  model	
  and	
  solve	
  a	
  mixed-­‐integer	
  
nonlinear	
  programming	
  (MINLP)	
  problem	
  (future	
  implementation).	
  	
  
	
  
-focus = simulation | estimation | optimization
The	
  focus	
  flag	
  value	
  allows	
  for	
  simulation	
  and	
  estimation	
  types	
  of	
  problems	
  but	
  currently	
  only	
  the	
  
optimization	
  value	
  is	
  supported.	
  
	
  
-factor = 1.0
The	
  factor	
  flag	
  value	
  is	
  a	
  real	
  positive	
  number	
  and	
  can	
  be	
  used	
  to	
  scale	
  quantity	
  variables	
  only	
  i.e.,	
  rates,	
  
flows	
  and	
  holdups.	
  
	
  
-factorizer = semisolverless | y12m | ysmp | nspiv | ma28 | pardiso
The	
  factorizer	
  flag	
  value	
  is	
  used	
  to	
  factorize	
  or	
  perform	
  LU	
  decomposition	
  on	
  a	
  square	
  system	
  or	
  set	
  of	
  
linear	
  and/or	
  nonlinear	
  equations	
  if	
  it	
  exists.	
  	
  If	
  the	
  number	
  of	
  free	
  and/or	
  finite	
  quantity	
  and	
  quality	
  
variables	
  equals	
  the	
  number	
  of	
  linear	
  and	
  nonlinear	
  equality	
  constraints	
  then	
  simulation	
  using	
  direct	
  
factorization	
  of	
  the	
  sparse	
  Jacobian	
  matrix	
  of	
  first-­‐order	
  partial	
  derivatives	
  can	
  be	
  used	
  to	
  solve	
  the	
  
problem	
  ignoring	
  all	
  inequality	
  constraints	
  and	
  variable	
  bounds.	
  	
  The	
  factorizer	
  flag	
  pardiso	
  requires	
  the	
  
Intel	
  Math	
  Kernel	
  Library	
  (MKL)	
  to	
  execute	
  a	
  parallel	
  implementation	
  of	
  LU	
  decomposition.	
  
	
  
-fork = solverless | coinmp | glpk | lpsolve | scip | cplex | gurobi | lindo | xpress
ipopt | conopt | knitro
slpqpe_coinmp | slpqpe_glpk | slpqpe_lpsolve | slpqpe_scip |
slpqpe_cplex | slpqpe_gurobi | slpqpe_lindo | slpqpe_xpress
secqpe_y12m | secqpe_ysmp | secqpe_nspiv | secqpe_ma28 |
secqpe_pardiso
secqpe_sorve | secqpe_y12m_sorve | secqpe_ysmp_sorve |
secqpe_nspiv_sorve | secqpe_ma28_sorve | secqpe_pardiso_sorve
The	
  fork	
  flag	
  value	
  is	
  used	
  to	
  solve	
  LP,	
  QP,	
  MILP	
  and	
  NLP	
  problems.	
  	
  The	
  solvers	
  slpqpe_	
  solve	
  nonlinear	
  
LP	
  or	
  QP	
  problems	
  using	
  the	
  various	
  LP	
  and	
  QP	
  solvers	
  suffixed.	
  	
  The	
  solvers	
  secqpe_	
  solve	
  nonlinear	
  
equality-­‐constrained	
  QP	
  problems	
  using	
  the	
  various	
  LU	
  decompositions	
  suffixed	
  which	
  are	
  useful	
  for	
  
data	
  reconciliation	
  and	
  regression	
  problems	
  (i.e.,	
  least	
  squares,	
  error-­‐in-­‐variables	
  and	
  parameter	
  
estimation	
  types	
  of	
  problems).	
  	
  The	
  suffixed	
  solvers	
  with	
  _sorve perform	
  a	
  post	
  sensitivity	
  analysis	
  to	
  
compute	
  the	
  observability,	
  redundancy	
  and	
  variability	
  estimates	
  using	
  the	
  known	
  sparse	
  Jacobian	
  matrix	
  
from	
  the	
  secqpe_	
  solve.	
  	
  If	
  variable	
  bounds	
  and	
  constraint	
  inequalities	
  are	
  required	
  then	
  solve	
  with	
  an	
  
NLP	
  first	
  then	
  warm-­‐start	
  with	
  slpqpe_sorve	
  to	
  perform	
  the	
  post	
  sensitivity	
  analysis.	
  
	
  
Note	
  that	
  the	
  solvers	
  scip, cplex, gurobi, lindo, xpress, conopt and	
  knitro	
  all	
  require	
  
commercial	
  licensing	
  agreements	
  from	
  their	
  vendors.	
  
	
  
-flashback = binaryfile | binaryram | flatfile
The	
  flashback	
  flag	
  value	
  is	
  used	
  to	
  save	
  or	
  retain	
  integer-­‐feasible	
  solutions	
  found	
  during	
  the	
  branch-­‐and-­‐
bound	
  type	
  of	
  enumerative	
  searches	
  employed	
  in	
  MILP	
  solvers.	
  	
  All	
  integer-­‐feasible	
  solutions	
  (variable	
  
results	
  or	
  responses	
  only)	
  are	
  saved	
  to	
  binary	
  or	
  unformatted	
  files	
  with	
  extension	
  *.bdt	
  where	
  a	
  “_n”	
  is	
  
suffixed	
  to	
  the	
  IML	
  file	
  problem	
  name	
  with	
  “n”	
  denoting	
  the	
  solution	
  number	
  found.	
  	
  The	
  flashback	
  flag	
  
value	
  of	
  binaryram	
  means	
  that	
  the	
  solution	
  is	
  also	
  saved	
  to	
  RAM	
  memory	
  and	
  a	
  value	
  of	
  flatfile	
  will	
  
save	
  the	
  solution	
  in	
  a	
  formatted	
  *.exl	
  file.	
  
	
  
-fanfare = 1073741823 (2^30 - 1)	
  
The	
  fanfare	
  flag	
  value	
  is	
  an	
  integer	
  bit	
  mask	
  with	
  0	
  to	
  30	
  bits.	
  	
  Depending	
  on	
  the	
  value	
  of	
  fanfare,	
  the	
  
various	
  IMPL	
  output	
  files	
  will	
  be	
  written	
  to	
  the	
  same	
  directory	
  as	
  the	
  IML	
  file.	
  	
  For	
  more	
  details	
  please	
  
refer	
  to	
  Appendix	
  A.	
  
	
  
-fuse = coldstart | warmstart
The	
  fuse	
  flag	
  value	
  is	
  only	
  valid	
  for	
  nonlinear	
  problems	
  where	
  a	
  warmstart	
  will	
  use	
  the	
  solution	
  variable	
  
result	
  values	
  from	
  a	
  previous	
  solve	
  (if	
  they	
  exist)	
  as	
  initial-­‐values	
  or	
  starting-­‐points	
  for	
  the	
  next	
  solve.	
  
	
  
-frequency = 0
The	
  frequency	
  flag	
  value	
  sets	
  the	
  number	
  of	
  solving	
  cycles	
  within	
  a	
  solving	
  execution	
  or	
  run.	
  	
  It	
  is	
  
essentially	
  a	
  do-­‐loop	
  starting	
  from	
  1	
  to	
  frequency	
  which	
  will	
  randomize	
  the	
  initial-­‐values,	
  starting-­‐points	
  
or	
  default-­‐results	
  starting	
  from	
  the	
  random	
  seed	
  setting	
  and	
  simply	
  incrementing	
  it	
  by	
  the	
  loop	
  iterate	
  
or	
  counter	
  i.e.,	
  initial_value = (lower_bound+upper_bound)/2 + (upper_bound-
lower_bound)*random_number(random_seed).	
  
	
  
IMPL	
  Input	
  Files	
  
	
  
IMPL.lic
License	
  file	
  for	
  IMPL	
  that	
  must	
  be	
  located	
  in	
  the	
  same	
  directory	
  as	
  the	
  IMPL	
  executable.	
  
	
  
IMPL.set | *.set
Settings	
  file	
  for	
  IMPL	
  that	
  may	
  be	
  located	
  in	
  the	
  same	
  directory	
  as	
  the	
  IMPL	
  executable	
  or	
  another	
  *.set	
  
file	
  located	
  in	
  the	
  same	
  directory	
  as	
  the	
  IML	
  file	
  with	
  the	
  same	
  name.	
  
	
  
IMPL.mem | *.mem
Memory	
  file	
  for	
  IMPL	
  that	
  may	
  be	
  located	
  in	
  the	
  same	
  directory	
  as	
  the	
  IMPL	
  executable	
  or	
  another	
  
*.mem	
  file	
  located	
  in	
  the	
  same	
  directory	
  as	
  the	
  IML	
  file	
  with	
  the	
  same	
  name.	
  	
  The	
  memory	
  file	
  is	
  used	
  to	
  
allocate	
  the	
  various	
  resource-­‐entities	
  of	
  IMPL.	
  
	
  
IMPL.solver | *.solver
Individual	
  solver	
  settings	
  files	
  for	
  the	
  various	
  IMPL	
  solvers	
  and	
  they	
  may	
  be	
  located	
  in	
  the	
  same	
  directory	
  
as	
  the	
  IMPL	
  executable	
  or	
  another	
  *.solver	
  file	
  located	
  in	
  the	
  same	
  directory	
  as	
  the	
  IML	
  file	
  with	
  the	
  
same	
  name.	
  
 
*.iml
Industrial	
  (input)	
  modeling	
  language	
  files	
  containing	
  the	
  IML	
  frames	
  configuring	
  a	
  problem.	
  
	
  
*.oml
Output	
  modeling	
  language	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  selected	
  variable	
  
results	
  and	
  constraint	
  residuals	
  can	
  be	
  written	
  to	
  user-­‐specified	
  files.	
  
	
  
*.ups
UOPSS	
  files	
  (or	
  universal	
  production/process	
  superstructure)	
  written	
  by	
  the	
  IALConstructer.py	
  Python	
  
2.3.5	
  code	
  found	
  in	
  the	
  Dia	
  open-­‐source	
  application	
  which	
  can	
  be	
  included	
  into	
  any	
  IMF	
  file.	
  	
  This	
  *.ups	
  
file	
  can	
  contain	
  the	
  complete	
  or	
  partial	
  construction	
  data	
  of	
  the	
  network,	
  graph,	
  diagram	
  or	
  flowsheet	
  of	
  
the	
  problem.	
  
	
  
*.ilp | *.inl
Foreign	
  files	
  with	
  scalar-­‐based	
  variable	
  and	
  constraint	
  names	
  can	
  be	
  used	
  to	
  extend	
  the	
  IMPL	
  modeling	
  
with	
  user-­‐created	
  and/or	
  shared	
  variables	
  and	
  user-­‐created	
  constraints.	
  	
  The	
  format	
  of	
  these	
  files	
  is	
  
similar	
  to	
  the	
  CPLEX	
  LP	
  files	
  where	
  for	
  nonlinear	
  model	
  extensions,	
  the	
  *.inl	
  file	
  allows	
  nonlinear	
  
expressions	
  to	
  be	
  specified.	
  	
  If	
  a	
  quantity	
  or	
  logistics	
  (LP,	
  QP	
  or	
  MILP)	
  problem	
  is	
  being	
  solved	
  then	
  only	
  
the	
  *.ilp	
  is	
  recognized	
  and	
  if	
  a	
  quality	
  (NLP)	
  problem	
  is	
  being	
  solved	
  then	
  only	
  *.inl	
  files	
  are	
  respected.	
  	
  
	
  
Both	
  the	
  *.ilp	
  and	
  *.inl	
  files	
  include	
  the	
  following	
  sections:	
  “Objective”,	
  “Constraints”	
  and	
  “Bounds”.	
  	
  	
  
There	
  is	
  also	
  a	
  “Binaries”	
  section	
  for	
  *.ilp	
  files	
  only	
  and	
  both	
  files	
  must	
  have	
  the	
  last	
  statement	
  as	
  “End”	
  
where	
  in-­‐line	
  comments	
  are	
  indicated	
  by	
  the	
  “”	
  backslash	
  character.	
  
	
  
IMPL	
  Output	
  Files	
  
	
  
*.io
Input	
  and	
  output	
  file	
  containing	
  the	
  inputs	
  and	
  outputs	
  for	
  each	
  IML	
  file	
  problem	
  UOPSS	
  superstructure.	
  
	
  
*.iod
Input	
  and	
  output	
  data	
  file	
  containing	
  the	
  input	
  and	
  output	
  data	
  for	
  each	
  IML	
  file	
  problem	
  UOPSS	
  
superstructure.	
  
 
*.oi
Output	
  and	
  input	
  file	
  containing	
  the	
  outputs	
  to	
  inputs	
  for	
  each	
  IML	
  file	
  problem	
  UOPSS	
  superstructure.	
  
	
  
*.exl
Export	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  selected	
  variable	
  result	
  values	
  are	
  
written	
  in	
  various	
  EXL	
  frames	
  similar	
  to	
  the	
  IML	
  frames.	
  
	
  
*.bdt
Binary	
  (unformatted)	
  files	
  storing	
  the	
  independent	
  sets,	
  catalogs,	
  lists,	
  parameters	
  and	
  formulas.	
  	
  These	
  
unformatted	
  files	
  are	
  useful	
  when	
  re-­‐running	
  IMPL	
  without	
  having	
  to	
  re-­‐read	
  the	
  *.iml	
  file.	
  
	
  
*_n.bdt
Binary	
  (unformatted)	
  files	
  suffixed	
  by	
  an	
  integer-­‐feasible	
  solution	
  number	
  “_n”	
  with	
  the	
  same	
  name	
  and	
  
location	
  as	
  the	
  IML	
  file	
  where	
  all	
  variable	
  results	
  for	
  a	
  single	
  integer-­‐feasible	
  solution	
  found	
  in	
  the	
  MILP	
  
solvers	
  are	
  written	
  in	
  unformatted	
  form.	
  
	
  
*.ldt
Log	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  IMPL	
  progress	
  messages	
  are	
  displayed	
  if	
  
USELOGFILE = 1	
  is	
  set	
  else	
  all	
  messages	
  will	
  be	
  sent	
  to	
  the	
  console	
  or	
  command	
  prompt	
  window.	
  
	
  
*.rdt
Report	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  IMPL	
  resource-­‐entity	
  details	
  are	
  
displayed.	
  
	
  
*.sdt
Summary	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  IMPL	
  modeling	
  and	
  presolving	
  
details	
  are	
  displayed	
  such	
  as	
  the	
  number	
  of	
  variables,	
  constraints	
  and	
  derivatives	
  included	
  or	
  excluded	
  
from	
  the	
  problem.	
  
	
  
*.tdt
Statics	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  if	
  any	
  IMPL	
  presolved	
  constraints	
  are	
  
found	
  to	
  be	
  infeasible	
  (i.e.,	
  violated	
  greater	
  than	
  a	
  tolerance)	
  at	
  a	
  solution,	
  are	
  displayed.	
  	
  	
  “Static”	
  
constraints	
  are	
  IMPL’s	
  term	
  for	
  constraints	
  that	
  are	
  presolved	
  or	
  removed	
  from	
  the	
  problem	
  by	
  IMPL	
  
before	
  the	
  solvers	
  (with	
  their	
  own	
  presolving)	
  are	
  called	
  where	
  “dynamic”	
  constraints	
  in	
  this	
  context	
  
mean	
  constraints	
  that	
  are	
  variable	
  in	
  the	
  solver.	
  	
  The	
  IMPL	
  presolver	
  may	
  or	
  may	
  not	
  “prempt”	
  the	
  
presolving	
  if	
  an	
  infeasible	
  or	
  inconsistent	
  constraint	
  is	
  found.	
  
	
  
*.jdt
Sensitivity	
  or	
  derivatives	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  the	
  first-­‐order	
  
partial	
  derivative	
  sparse	
  Jacobian	
  matrix	
  elements	
  are	
  displayed.	
  
	
  
*.ndt
Symbolic	
  or	
  mnemonic	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  a	
  human-­‐readable	
  
form	
  of	
  both	
  the	
  linear	
  and	
  nonlinear	
  constraints	
  are	
  displayed	
  for	
  every	
  variable	
  and	
  constraint	
  known	
  
to	
  the	
  problem.
	
  
*.imp, *.imv, *.imc
Three	
  files	
  containing	
  all	
  of	
  the	
  parameters	
  (including	
  all	
  of	
  the	
  sets,	
  catalogs,	
  lists	
  and	
  formulas),	
  
variables	
  and	
  constraints	
  created	
  by	
  IMPL	
  to	
  model	
  the	
  problem.	
  	
  These	
  files	
  can	
  be	
  used	
  to	
  reference	
  
the	
  names	
  found	
  in	
  the	
  *.dta	
  files	
  below.	
  
	
  
*.dtr
Series-­‐set	
  (or	
  range-­‐set)	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  all	
  SERIES-­‐SET	
  
resource-­‐entity	
  roster-­‐enumerations	
  are	
  output.	
  
	
  
*.dts
Simple-­‐set	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  all	
  SIMPLE-­‐SET	
  resource-­‐entity	
  
roster-­‐enumerations	
  are	
  output.	
  
	
  
*.dty
Symbol-­‐set	
  	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  all	
  SYMBOL-­‐SET	
  resource-­‐entity	
  
roster-­‐enumerations	
  are	
  output.	
  
	
  
*.dtg
Catalog	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  all	
  CATALOG	
  resource-­‐entity	
  roster-­‐
enumerations	
  are	
  output.	
  
	
  
*.dtl
List	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  all	
  LIST	
  resource-­‐entity	
  roster-­‐
enumerations	
  are	
  output.	
  
	
  
*.dtp
Parameter	
  	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  all	
  PARAMETER	
  resource-­‐entity	
  
roster-­‐enumerations	
  are	
  output.	
  
	
  
*.dtv
Variable	
  	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  all	
  VARIABLE	
  resource-­‐entity	
  
roster-­‐enumerations	
  are	
  output.	
  
	
  
*.dtw
“Vetistic”	
  (vetting)	
  or	
  statistic	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  all	
  VARIABLE	
  
and	
  CONSTRAINT	
  resource-­‐entity	
  roster-­‐enumerations	
  are	
  output	
  when	
  the	
  solvers	
  suffixed	
  with	
  _sorve	
  	
  
are	
  used.	
  	
  This	
  file	
  outputs	
  the	
  observability	
  and	
  redundancy	
  metrics,	
  variances,	
  “maximum	
  power”	
  
gross-­‐error	
  detection	
  statistics	
  and	
  confidence-­‐intervals.	
  
	
  
*.dtc
Constraint	
  	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  all	
  CONSTRAINT	
  resource-­‐entity	
  
roster-­‐enumerations	
  are	
  output.	
  
	
  
*.dtf
Formula	
  	
  files	
  with	
  the	
  same	
  name	
  and	
  location	
  as	
  the	
  IML	
  file	
  where	
  all	
  FORMULA	
  resource-­‐entity	
  
roster-­‐enumerations	
  are	
  output.	
  
	
  
Appendix	
  A	
  –	
  IMPL	
  Console	
  Source	
  Code	
  in	
  Intel	
  Fortran	
  (IMPL.exe)	
  
	
  
Provided	
  below	
  is	
  the	
  Intel	
  Fortran	
  source	
  code	
  which	
  calls	
  the	
  various	
  routines	
  found	
  in	
  the	
  IMPL	
  
system	
  architecture	
  SIIMPLE	
  (Server,	
  Interacter,	
  Interfacer,	
  Modeler,	
  Presolver	
  Libraries).	
  	
  We	
  have	
  
included	
  this	
  source	
  code	
  to	
  show	
  how	
  to	
  call	
  IMPL	
  with	
  SIIMPL	
  from	
  other	
  computer	
  programming	
  
languages	
  such	
  as	
  C,	
  C++,	
  C#,	
  Java,	
  Python,	
  Excel/VBA,	
  etc.	
  
	
  
program IMPL
use IFWIN
use IMPLserver
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c INDUSTRIAL ALGORITHMS LLC. CONFIDENTIAL & PROPRIETARY cccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
implicit none
c Project "feed" data name which also includes the path.
character(BASESTRINGLEN*LINESTRINGLENMULT) :: feed
c Problem "fact" data name which also includes the path.
character(BASESTRINGLEN*LINESTRINGLENMULT) :: fact
c Data "face" or stream i.e., either "import/out" or "export/in".
integer(4) :: face
c Model "factor" or scaling for dominant or primary phenomenological dimension.
real(8) :: factor
c Model "sipher" (cipher, secret-code) for encryption and deencryption.
integer(8) :: fob
c Model "form "or structure i.e., either "sparsic" or "symbolic".
integer(4) :: form
c Model "fit" or slot usually the temporal dimension.
integer(4) :: fit
c Model "filter" or select.
integer(4) :: filter
c Model "focus" or syllabus.
integer(4) :: focus
c Model "filler" or supplemental pointing to the supplierlib() routine.
integer(4) :: filler
c Model "foreign" ILP or INL file.
character(BASESTRINGLEN*LINESTRINGLENMULT) :: foreign
c Semi-solve "factorizer" or semi-solver.
integer(4) :: factorizer
c Solve "fork" or solver.
integer(4) :: fork
c Solve fresh or "stale".
integer(4) :: fresh
c Savings format for intermediate integer-feasible solutions when they are found during the search.
integer(4) :: flashback
c Feedback or callback "summons" routine.
integer(4) :: feedback
c Model and solve fanfare or "show".
integer(4) :: fanfare
c Solve from a previously solved solution (and not necessarily converged) i.e., "fuse" this new solution
c with a preceding solution ("warm-start" v. "cold-start").
integer(4) :: fuse
c	
  Rerun/restart/repeat	
  the	
  modeling	
  and	
  solving	
  in	
  a	
  loop	
  a	
  specified	
  number	
  of	
  times	
  by	
  randomizing	
  the	
  initial-­‐	
  
c	
  values	
  or	
  starting-­‐points	
  using	
  the	
  random-­‐seed.	
  
c	
  
c	
  The	
  frequency	
  ("stride")	
  is	
  the	
  number	
  of	
  cycles	
  plus	
  one	
  (+1)	
  per	
  execution	
  or	
  run	
  of	
  this	
  console	
  program	
  where	
  	
  
c	
  zero	
  (0)	
  means	
  only	
  the	
  initial,	
  starting	
  or	
  default	
  run	
  is	
  performed.	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  integer(4)	
  ::	
  frequency	
  
	
  	
  	
  	
  	
  	
  	
  	
  integer(4)	
  ::	
  rseed	
  
	
  
c Data frames separated by the ASCII NULL character i.e., CHAR(0) in fortran or "/n" in C.
character(BASESTRINGLEN*PAGESTRINGLENMULT) :: frames
integer(4) :: flag
c Command line argument string value.
character(BASESTRINGLEN*LINESTRINGLENMULT) :: sargument, sargument1, sargument2
interface
function IMPLinterfaceri(fact,form,fit,filter,focus,face,factor,fob,frames)
#if stdcalling == 1
cDEC$ ATTRIBUTES DLLIMPORT, STDCALL, REFERENCE, DECORATE, ALIAS : "IMPLinterfaceri" :: IMPLINTERFACERI
#else
cDEC$ ATTRIBUTES DLLIMPORT, ALIAS : "IMPLinterfaceri" :: IMPLINTERFACERI
#endif
integer(4) :: IMPLinterfaceri
character(*), intent(in) :: fact
cDEC$ ATTRIBUTES REFERENCE :: fact
integer(4), intent(in) :: form
cDEC$ ATTRIBUTES VALUE :: form
integer(4), intent(in) :: fit
cDEC$ ATTRIBUTES VALUE :: fit
integer(4), intent(in) :: filter
cDEC$ ATTRIBUTES VALUE :: filter
integer(4), intent(in) :: focus
cDEC$ ATTRIBUTES VALUE :: focus
integer(4), intent(in) :: face
cDEC$ ATTRIBUTES VALUE :: face
real(8), intent(in) :: factor
cDEC$ ATTRIBUTES VALUE :: factor
integer(8), intent(in) :: fob
cDEC$ ATTRIBUTES VALUE :: fob
character(*), intent(in) :: frames
cDEC$ ATTRIBUTES REFERENCE :: frames
end function IMPLinterfaceri
function IMPLinterfacere(fact,form,fit,filter,focus,face,factor,fob,frames)
#if stdcalling == 1
cDEC$ ATTRIBUTES DLLIMPORT, STDCALL, REFERENCE, DECORATE, ALIAS : "IMPLinterfacere" :: IMPLINTERFACERE
#else
cDEC$ ATTRIBUTES DLLIMPORT, ALIAS : "IMPLinterfacere" :: IMPLINTERFACERE
#endif
integer(4) :: IMPLinterfacere
character(*), intent(in) :: fact
cDEC$ ATTRIBUTES REFERENCE :: fact
integer(4), intent(in) :: form
cDEC$ ATTRIBUTES VALUE :: form
integer(4), intent(in) :: fit
cDEC$ ATTRIBUTES VALUE :: fit
integer(4), intent(in) :: filter
cDEC$ ATTRIBUTES VALUE :: filter
integer(4), intent(in) :: focus
cDEC$ ATTRIBUTES VALUE :: focus
integer(4), intent(in) :: face
cDEC$ ATTRIBUTES VALUE :: face
real(8), intent(in) :: factor
cDEC$ ATTRIBUTES VALUE :: factor
integer(8), intent(in) :: fob
cDEC$ ATTRIBUTES VALUE :: fob
character(*), intent(in) :: frames
cDEC$ ATTRIBUTES REFERENCE :: frames
end function IMPLinterfacere
function IMPLmodelerv(fact,form,fit,filter,focus,filler,foreign,force)
#if stdcalling == 1
cDEC$ ATTRIBUTES DLLIMPORT, STDCALL, REFERENCE, DECORATE, ALIAS : "IMPLmodelerv" :: IMPLMODELERV
#else
cDEC$ ATTRIBUTES DLLIMPORT, ALIAS : "IMPLmodelerv" :: IMPLMODELERV
#endif
integer(4) :: IMPLmodelerv
character(*), intent(in) :: fact
cDEC$ ATTRIBUTES REFERENCE :: fact
integer(4), intent(in) :: form
cDEC$ ATTRIBUTES VALUE :: form
integer(4), intent(in) :: fit
cDEC$ ATTRIBUTES VALUE :: fit
integer(4), intent(in) :: filter
cDEC$ ATTRIBUTES VALUE :: filter
integer(4), intent(in) :: focus
cDEC$ ATTRIBUTES VALUE :: focus
integer(4), intent(in) :: filler
cDEC$ ATTRIBUTES REFERENCE :: filler
character(*), optional, intent(in) :: foreign
cDEC$ ATTRIBUTES REFERENCE :: foreign
integer(4), optional, intent(in) :: force
cDEC$ ATTRIBUTES REFERENCE :: force
end function IMPLmodelerv
function IMPLmodelerc(fact,form,fit,filter,focus,filler,foreign,force)
#if stdcalling == 1
cDEC$ ATTRIBUTES DLLIMPORT, STDCALL, REFERENCE, DECORATE, ALIAS : "IMPLmodelerc" :: IMPLMODELERC
#else
cDEC$ ATTRIBUTES DLLIMPORT, ALIAS : "IMPLmodelerc" :: IMPLMODELERC
#endif
integer(4) :: IMPLmodelerc
character(*), intent(in) :: fact
cDEC$ ATTRIBUTES REFERENCE :: fact
integer(4), intent(in) :: form
cDEC$ ATTRIBUTES VALUE :: form
integer(4), intent(in) :: fit
cDEC$ ATTRIBUTES VALUE :: fit
integer(4), intent(in) :: filter
cDEC$ ATTRIBUTES VALUE :: filter
integer(4), intent(in) :: focus
cDEC$ ATTRIBUTES VALUE :: focus
integer(4), intent(in) :: filler
cDEC$ ATTRIBUTES REFERENCE :: filler
character(*), optional, intent(in) :: foreign
cDEC$ ATTRIBUTES REFERENCE :: foreign
integer(4), optional, intent(in) :: force
cDEC$ ATTRIBUTES REFERENCE :: force
end function IMPLmodelerc
function IMPLpresolver(fact,form,fit,filter,focus,factorizer,fork,fresh,flashback,feedback)
#if stdcalling == 1
cDEC$ ATTRIBUTES DLLIMPORT, STDCALL, REFERENCE, DECORATE, ALIAS : "IMPLpresolver" :: IMPLPRESOLVER
#else
cDEC$ ATTRIBUTES DLLIMPORT, ALIAS : "IMPLpresolver" :: IMPLPRESOLVER
#endif
integer(4) :: IMPLpresolver
character(*), intent(in) :: fact
cDEC$ ATTRIBUTES REFERENCE :: fact
integer(4), intent(in) :: form
cDEC$ ATTRIBUTES VALUE :: form
integer(4), intent(in) :: fit
cDEC$ ATTRIBUTES VALUE :: fit
integer(4), intent(in) :: filter
cDEC$ ATTRIBUTES VALUE :: filter
integer(4), intent(in) :: focus
cDEC$ ATTRIBUTES VALUE :: focus
integer(4), intent(in) :: factorizer
cDEC$ ATTRIBUTES VALUE :: factorizer
integer(4), intent(in) :: fork
cDEC$ ATTRIBUTES VALUE :: fork
integer(4), intent(in) :: fresh
cDEC$ ATTRIBUTES VALUE :: fresh
integer(4), intent(in) :: flashback
cDEC$ ATTRIBUTES VALUE :: flashback
integer(4), intent(in) :: feedback
cDEC$ ATTRIBUTES REFERENCE :: feedback
end function IMPLpresolver
end interface
c Integer pointer to modeling subroutine location.
integer(4) :: ptr_IMPLmodelerc
c Temporary allocatable storage when required.
integer(4), allocatable :: ival(:)
real(8), allocatable :: rval(:)
character(BASESTRINGLEN), allocatable :: sval(:)
c Miscellaneous.
integer(4) :: i, rtnstat, lun
character(BASESTRINGLEN*LINESTRINGLENMULT) :: logmessage
character(BASESTRINGLEN) :: setting
character(BASESTRINGLEN) :: startdate, finishdate, sizelimits, hostname, username
c Timings for performance monitoring or profiling.
c
c * Note that to compute running times then use the following code.
c
c ftime = DCLOCK()
c dttime = ftime-stime
c ttime = ttime+dttime
c stime = ftime
c
c * Note that CPU_TIME() returns the sum of time over all threads which does return the elapsed time.
c Instead DCLOCK() returns the elapsed time and requires module IFPORT.
real(8) :: stime, ftime, dttime, ttime, ttime2
c Start the clock.
ttime = 0
stime = DCLOCK()
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c Specify a version number for which will be maintained as a standalone entity.
c
c Year.Month.DayIncrement i.e., 2007-12-05 5th increment per day = 7.12.055 (major.minor.update release).
c
c This versioning scheme is simple and accurate and only useful for tracking changes continuously. It is
c not a snapshot or build release number with "major.minor.patch" release structure.
c * Note that "-1" means to write to standard output which is usually the screen.
rtnstat = IMPLwritebanner(-1)
write(*,"(1X,A)")"<<< i M P l - E x e c u t a b l e (console)"
write(*,"(1X,A)")"<<<"
write(*,"(1X,A)")"<<< Release # 1.0"
write(*,"(1X,A)")"<<< Version # 12.5.141"
write(*,"(1X,A)")"<<<"
write(*,"(1X,4A)")"<<< Last Compiled: ",__DATE__," ",__TIME__
write(*,"(1X,A)")"<<<"
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c Parse the command line arguments for the required flags.
feed = "c:IMPLIMLfile"
fact = feed
form = SPARSIC$
! form = SYMBOLIC$
fit = DISCRETE$
! fit = DISTRIBUTE$
filter = QUANTITY$
! filter = LOGISTICS$
! filter = QUALITY$
c Simulation, Estimation and Optimization "Interoperability".
! focus = SIMULATION$
! focus = ESTIMATION$
focus = OPTIMIZATION$
factor = 1d+0
factorizer = SEMISOLVERLESS$
! factorizer = Y12M$
! factorizer = YSMP$
! factorizer = NSPIV$
! factorizer = MA28$
! factorizer = PARDISO$
fork = SOLVERLESS$
! fork = COINMP$
! fork = GLPK$
! fork = LPSOLVE$
! fork = SCIP$
! fork = CPLEX$
! fork = GUROBI$
! fork = LINDO$
! fork = OPTONOMY$
! fork = XPRESS$
!SQP's
! fork = IPOPT$
! fork = CONOPT$
! fork = KNITRO$
! fork = NOVA$
! fork = WORHP$
!SLP's
! fork = SLPQPE_COINMP$
! fork = SLPQPE_GLPK$
! fork = SLPQPE_LPSOLVE$
! fork = SLPQPE_SCIP$
! fork = SLPQPE_CPLEX$
! fork = SLPQPE_GUROBI$
! fork = SLPQPE_OPTONOMY$
! fork = SLPQPE_XPRESS$
! fork = SLPQPE_IPOPT$
! fork = SECQPE_Y12M$
! fork = SECQPE_YSMP$
! fork = SECQPE_NSPIV$
! fork = SECQPE_MA28$
! fork = SECQPE_PARDISO$
! fork = SECQPE_SORVE$
! fork = SECQPE_Y12M_SORVE$
! fork = SECQPE_YSMP_SORVE$
! fork = SECQPE_NSPIV_SORVE$
! fork = SECQPE_MA28_SORVE$
! fork = SECQPE_PARDISO_SORVE$
c Suitability (svve), Steadyability (ssde) and Scrumability (sfcme).
! fork = SVVE$
! fork = SSDE$
! fork = SFCME$
fanfare = SHOWALL$
fuse = COLDSTART$
! fuse = WARMSTART$
frequency = 0
fob = 0
frames = CHAR(0)
c Get the library and function addresses for the filler, supplemental, external modeler, etc. which will provide the
c necessary modeling for "black-blank" unit-operations.
c
c * Note that if the filler or supplemental routine is not found, then the return status is either negative or zero (0) and
c hence filler = 0.
filler = loadlibrary("C:IndustrialAlgorithmsPlatformIMPLIMPLsupplierDebugIMPLsupplier.dll"//CHAR(0))
if (filler > 0) then
filler = getprocaddress(filler,"IMPLsupplierlib"//CHAR(0))
else
filler = 0
end if
fresh = FIRSTSESSION$
c Save, cache, store, persist, etc. integer-feasible solutions to an *.exl file as well as the default *.bdt binary file.
flashback = FLATFILE$
c Point to the "recall()" routine provided by the "server".
feedback = LOC(IMPLrecall)
c The command line arguments (flags) can be specified as follows:
c
c * Note that if the second argument (after the "=" sign) is not recognizable as a valid value then an exception or
c error occurs.
c
c impl.exe -feed=""
c -form=sparsic
c -fit=discrete
c -filter=logistics
c -focus=optimization
c -factor=1
c -factorizer=y12m
c -fork=lpsolve
c -flashback=flatfile
c -fanfare=1073741823
c -fuse=cold
c -frequency=0
do i = 1,COMMAND_ARGUMENT_COUNT()
call GET_COMMAND_ARGUMENT(i,sargument)
sargument1 = sargument(1:INDEX(sargument,"="))
sargument2 = sargument(INDEX(sargument,"=")+1:BASESTRINGLEN*LINESTRINGLENMULT)
select case (sargument1)
case ("-feed=")
if (TRIM(sargument2) /= "") then
feed = TRIM(sargument2)
fact = feed
else
write(*,*)"<<< %ERROR% - unknown -feed= argument present."
stop
end if
write(*,*)"<<< feed = ",TRIM(sargument2)
write(*,*)"<<< fact = ",TRIM(sargument2)
case ("-form=")
if (TRIM(sargument2) == "sparsic") then
form = SPARSIC$
elseif (TRIM(sargument2) == "symbolic") then
form = SYMBOLIC$
else
write(*,*)"<<< %ERROR% - unknown -form= argument present."
stop
end if
write(*,*)"<<< form = ",TRIM(sargument2)," = ",form
case ("-fit=")
if (TRIM(sargument2) == "discrete") then
fit = DISCRETE$
elseif (TRIM(sargument2) == "distribute") then
fit = DISTRIBUTE$
else
write(*,*)"<<< %ERROR% - unknown -fit= argument present."
stop
end if
write(*,*)"<<< fit = ",TRIM(sargument2)," = ",fit
case ("-filter=")
if (TRIM(sargument2) == "quantity") then
filter = QUANTITY$
elseif (TRIM(sargument2) == "logistics") then
filter = LOGISTICS$
elseif (TRIM(sargument2) == "quality") then
filter = QUALITY$
else
write(*,*)"<<< %ERROR% - unknown -filter= argument present."
stop
end if
write(*,*)"<<< filter = ",TRIM(sargument2)," = ",filter
case ("-focus=")
if (TRIM(sargument2) == "simulation") then
focus = SIMULATION$
elseif (TRIM(sargument2) == "estimation") then
focus = ESTIMATION$
elseif (TRIM(sargument2) == "optimization") then
focus = OPTIMIZATION$
else
write(*,*)"<<< %ERROR% - unknown -focus= argument present."
stop
end if
write(*,*)"<<< focus = ",TRIM(sargument2)," = ",focus
case ("-factor=")
if (TRIM(sargument2) /= "") then
read(sargument2,*)factor
factor = ABS(MIN(INFIN,factor))
else
write(*,*)"<<< %ERROR% - no -factor= argument present."
stop
end if
write(*,*)"<<< factor = ",factor
case ("-factorizer=")
if (TRIM(sargument2) == "") then
factorizer = SEMISOLVERLESS$
elseif (TRIM(sargument2) == "y12m") then
factorizer = Y12M$
elseif (TRIM(sargument2) == "ysmp") then
factorizer = YSMP$
elseif (TRIM(sargument2) == "nspiv") then
factorizer = NSPIV$
elseif (TRIM(sargument2) == "ma28") then
factorizer = MA28$
elseif (TRIM(sargument2) == "pardiso") then
factorizer = PARDISO$
else
write(*,*)"<<< %ERROR% - unknown -factorizer= argument present."
stop
end if
write(*,*)"<<< factorizer = ",TRIM(sargument2)," = ",factorizer
case ("-fork=")
if (TRIM(sargument2) == "") then
fork = SOLVERLESS$
elseif (TRIM(sargument2) == "coinmp") then
fork = COINMP$
elseif (TRIM(sargument2) == "glpk") then
fork = GLPK$
elseif (TRIM(sargument2) == "lpsolve") then
fork = LPSOLVE$
elseif (TRIM(sargument2) == "scip") then
fork = SCIP$
elseif (TRIM(sargument2) == "cplex") then
fork = CPLEX$
elseif (TRIM(sargument2) == "gurobi") then
fork = GUROBI$
elseif (TRIM(sargument2) == "xpress") then
fork = XPRESS$
elseif (TRIM(sargument2) == "conopt") then
fork = CONOPT$
elseif (TRIM(sargument2) == "ipopt") then
fork = IPOPT$
elseif (TRIM(sargument2) == "knitro") then
fork = KNITRO$
elseif (TRIM(sargument2) == "nova") then
fork = NOVA$
elseif (TRIM(sargument2) == "worhp") then
fork = WORHP$
elseif (TRIM(sargument2) == "slpqpe_coinmp") then
fork = SLPQPE_COINMP$
elseif (TRIM(sargument2) == "slpqpe_glpk") then
fork = SLPQPE_GLPK$
elseif (TRIM(sargument2) == "slpqpe_lpsolve") then
fork = SLPQPE_LPSOLVE$
elseif (TRIM(sargument2) == "slpqpe_scip") then
fork = SLPQPE_SCIP$
elseif (TRIM(sargument2) == "slpqpe_cplex") then
fork = SLPQPE_CPLEX$
elseif (TRIM(sargument2) == "slpqpe_gurobi") then
fork = SLPQPE_GUROBI$
elseif (TRIM(sargument2) == "slpqpe_optonomy") then
fork = SLPQPE_OPTONOMY$
elseif (TRIM(sargument2) == "slpqpe_xpress") then
fork = SLPQPE_XPRESS$
elseif (TRIM(sargument2) == "secqpe_y12m") then
fork = SECQPE_Y12M$
elseif (TRIM(sargument2) == "secqpe_ysmp") then
fork = SECQPE_YSMP$
elseif (TRIM(sargument2) == "secqpe_nspiv") then
fork = SECQPE_NSPIV$
elseif (TRIM(sargument2) == "secqpe_ma28") then
fork = SECQPE_MA28$
elseif (TRIM(sargument2) == "secqpe_pardiso") then
fork = SECQPE_PARDISO$
elseif (TRIM(sargument2) == "secqpe_sorve") then
fork = SECQPE_SORVE$
elseif (TRIM(sargument2) == "secqpe_y12m_sorve") then
fork = SECQPE_Y12M_SORVE$
elseif (TRIM(sargument2) == "secqpe_ysmp_sorve") then
fork = SECQPE_YSMP_SORVE$
elseif (TRIM(sargument2) == "secqpe_nspiv_sorve") then
fork = SECQPE_NSPIV_SORVE$
elseif (TRIM(sargument2) == "secqpe_ma28_sorve") then
fork = SECQPE_MA28_SORVE$
elseif (TRIM(sargument2) == "secqpe_pardiso_sorve") then
fork = SECQPE_PARDISO_SORVE$
else
write(*,*)"<<< %ERROR% - unknown -fork= argument present."
stop
end if
write(*,*)"<<< fork = ",TRIM(sargument2)," = ",fork
case ("-flashback=")
if (TRIM(sargument2) == "") then
flashback = BINARYFILE$
elseif (TRIM(sargument2) == "binaryfile") then
flashback = BINARYFILE$
elseif (TRIM(sargument2) == "binaryram") then
flashback = BINARYRAM$
elseif (TRIM(sargument2) == "flatfile") then
flashback = FLATFILE$
else
write(*,*)"<<< %ERROR% - unknown -flashback= argument present."
stop
end if
write(*,*)"<<< flashback = ",TRIM(sargument2)," = ",flashback
case ("-fanfare=")
if (TRIM(sargument2) /= "") then
read(sargument2,*)fanfare
fanfare = ABS(fanfare)
show$ = fanfare
end if
write(*,*)"<<< fanfare = ",TRIM(sargument2)," = ",fanfare
case ("-fuse=")
if (TRIM(sargument2) == "cold") then
fuse = COLDSTART$
elseif (TRIM(sargument2) == "warm") then
fuse = WARMSTART$
else
write(*,*)"<<< %ERROR% - unknown -fuse= argument present."
stop
end if
write(*,*)"<<< fuse = ",TRIM(sargument2)," = ",fuse
case ("-frequency=")
if (TRIM(sargument2) /= "") then
read(sargument2,*)frequency
frequency = ABS(frequency)
else
write(*,*)"<<< %ERROR% - no -frequency= argument present."
stop
end if
write(*,*)"<<< frequency = ",frequency
end select
end do
show$ = fanfare
start$ = fuse
stride$ = frequency
c Specify the foreign ILP or INL file and if it exists, it will be used to augment or extend the matrix.
foreign = TRIM(fact)//".ilp"
if ((filter == QUALITY$) .or. (filter == QUALOGISTICS$)) then
foreign = TRIM(fact)//".inl"
end if
supplementary$ = foreign
c If "symbolic-form" specified but the solving-system is of the "sparsic-form" only then solve the
c "sparsic-form".
c
c * Note that at the moment only IPOPT and SLPQPE can be of both the "sparsic" and "symbolic" forms.
if ((fork == CONOPT$) .or. (fork == KNITRO$) .or.
& (fork == NOVA$) .or. (fork == WORHP$)) then
form = SPARSIC$
end if
c Only allow "symbolic-form" with XPRESS-SLP and LINDO-SLP given that these are not possible to be called
c using "sparsic-form".
if ((fork == XPRESS$) .or. (fork == LINDO$)) then
form = SYMBOLIC$
end if
c Only allow discrete-time for logistics.
if (filter == LOGISTICS$) then
fit = DISCRETE$
end if
c Only allow our nonlinear SLPQPE_ solver as the fork if filter equal "quality" and a LP solver has been specified.
if (filter == QUALITY$) then
if (fork == COINMP$) then
fork = SLPQPE_COINMP$
elseif (fork == GLPK$) then
fork = SLPQPE_GLPK$
elseif (fork == LPSOLVE$) then
fork = SLPQPE_LPSOLVE$
elseif (fork == SCIP$) then
fork = SLPQPE_SCIP$
elseif (fork == CPLEX$) then
fork = SLPQPE_CPLEX$
elseif (fork == GUROBI$) then
fork = SLPQPE_GUROBI$
end if
end if
write(*,*)"<<<"
write(*,*)"<<<",TRIM(fact)
write(*,*)"<<<"
c Initialize or establish the environment using the settings and license files.
rtnstat = IMPLroot(fact)
if (rtnstat == INNON) then
write(*,*)"<<< %ERROR% - Invalid or missing license file."
stop
elseif (rtnstat > 0) then
write(*,*)"<<< %ERROR% - Missing settings file."
stop
elseif (rtnstat < 0) then
write(*,*)"<<< %WARNING% - Number of missing settings = ",-rtnstat
end if
logmessage = "<<<"
rtnstat = IMPLwritelog(logmessage)
logmessage = "<<< Root successful."
rtnstat = IMPLwritelog(logmessage)
c Initialize or allocate the global memory using the memory file.
rtnstat = IMPLreserve(fact,ALL)
if (rtnstat == INNON) then
write(*,*)"<<< %ERROR% - Invalid or missing license file."
stop
elseif (rtnstat > 0) then
write(*,*)"<<< %ERROR% - Missing memory file."
stop
elseif (rtnstat < 0) then
write(*,*)"<<< %WARNING% - Missing memory setting."
end if
logmessage = "<<< Reserve successful."
rtnstat = IMPLwritelog(logmessage)
ftime = DCLOCK()
dttime = ftime-stime
ttime = ttime+dttime
stime = ftime
write(*,*)"<<<"
write(*,*)"<<< Initialization time = ",dttime
write(*,*)"<<<"
c "Interface" the industrial/manufacturing optimization problem data.
c
c Interfacing the problem means reading in, inputing or importing the problem from the industrial/manufacturing
c modeling language file (*.iml).
face = IMPORT$
frames = CHAR(0)
rtnstat = IMPLinterfaceri(fact,form,fit,filter,focus,face,factor,fob,frames)
if (rtnstat == INNON) then
write(*,*)"<<< %ERROR% - Invalid arguments."
stop
elseif (rtnstat > 0) then
write(*,*)"<<< %ERROR% - Issue parsing import-file on line = ",rtnstat
stop
elseif (rtnstat < 0) then
write(*,*)"<<< %WARNING% - Issue parsing import-file on line = ",ABS(rtnstat)
end if
rtnstat = IMPLreassure()
if (rtnstat /= 0) then
write(*,*)"<<< %ERROR% - Memory violation for resource-entity type = ",TRIM(IMPLreason(rtnstat))
stop
end if
logmessage = "<<< Reassure successful."
rtnstat = IMPLwritelog(logmessage)
ftime = DCLOCK()
dttime = ftime-stime
ttime = ttime+dttime
stime = ftime
write(*,*)"<<<"
write(*,*)"<<< Import time = ",dttime
write(*,*)"<<<"
c "Serialize" or persist the problem-data i.e., sets, catalogs, lists, parameters and formulas representing the model-data
c (master-data) and cycle-data (transactional-data).
c
c * Note that the "problem-data" (model-data and cycle-data) is converted to "matrix-data" in the "modeler" where it
c creates/generates the variables (columns), constraints (rows) and derivatives (Jacobian/Hessian) (and expressions).
rtnstat = IMPLrender(fact,ALL)
if (rtnstat == 0) then
logmessage = "<<< Render successful."
rtnstat = IMPLwritelog(logmessage)
else
logmessage = "<<< Render unsuccessful."
rtnstat = IMPLwritelog(logmessage)
end if
c "Model" the industrial/manufacturing optimization problem (IOP/MOP).
c
c Modeling the problem creates/generates the variables and constraints and any dependent sets, catalogs, lists and parameters
c necessary to model all of the physical (structural), procedural (operational), projectional and phenomenological details.
c In addition, the derivatives and expressions are also created or generated in the "modeler".
c First, model the sets, catalogs, lists and parameters ("setup").
rtnstat = IMPLmodelerv(fact,form,fit,filter,focus,filler,foreign,force=PARAMETER)
if (rtnstat == INNON) then
write(*,*)"<<< %ERROR% - Invalid arguments."
stop
end if
ftime = DCLOCK()
dttime = ftime-stime
ttime = ttime+dttime
stime = ftime
write(*,*)"<<<"
write(*,*)"<<< Model (Sets, Lists, Parameters) time = ",dttime
ttime2 = dttime
c Second, model the variables ("specify").
rtnstat = IMPLmodelerv(fact,form,fit,filter,focus,filler,foreign,force=VARIABLE)
if (rtnstat == INNON) then
write(*,*)"<<< %ERROR% - Invalid arguments."
stop
end if
ftime = DCLOCK()
dttime = ftime-stime
ttime = ttime+dttime
stime = ftime
write(*,*)"<<< Model (Variables) time = ",dttime
ttime2 = ttime2 + dttime
c If this is a "warm-start" then open the variables' results data file if it exists and read in the result values
c for the "original" problem i.e., previous solution-data.
if ((fuse == WARMSTART$) .and. (fork /= SECQPE_SORVE$)) then
lun = INILUN
INQUIRE(UNIT=lun,OPENED=rtnstat)
do while (rtnstat)
lun = lun + 1
INQUIRE(UNIT=lun,OPENED=rtnstat)
end do
open(UNIT=lun,
& FILE=TRIM(fact)//"_vv.dta",
& STATUS="OLD",
& ACCESS="SEQUENTIAL",
& ACTION="READ",
& FORM="FORMATTED",
& SHARED,
& IOSTAT=rtnstat)
if (rtnstat == 0) then
allocate(rval(1:vvc))
do i = 1,vvc
read(lun,*)rval(i)
end do
close(lun)
rtnstat = IMPLrevise2(VARIABLE,vvc,1,0,rval(1:vvc))
deallocate(rval)
end if
end if
c Third (last), model the constraints ("specificate/simulate/stipulate").
c
c * Note that only in the constraints section of the modeling do we require the formulas.
rtnstat = IMPLmodelerc(fact,form,fit,filter,focus,filler,foreign,force=CONSTRAINT)
if (rtnstat == INNON) then
write(*,*)"<<< %ERROR% - Invalid arguments."
stop
elseif (rtnstat > 0) then
write(*,*)"<<< %ERROR% - Invalid input."
stop
end if
if ((fuse == WARMSTART$) .and. (fork == SECQPE_SORVE$)) then
lun = INILUN
INQUIRE(UNIT=lun,OPENED=rtnstat)
do while (rtnstat)
lun = lun + 1
INQUIRE(UNIT=lun,OPENED=rtnstat)
end do
open(UNIT=lun,
& FILE=TRIM(fact)//"_vv.dta",
& STATUS="OLD",
& ACCESS="SEQUENTIAL",
& ACTION="READ",
& FORM="FORMATTED",
& SHARED,
& IOSTAT=rtnstat)
if (rtnstat == 0) then
allocate(rval(1:vvc))
do i = 1,vvc
read(lun,*)rval(i)
end do
close(lun)
rtnstat = IMPLrevise2(VARIABLE,vvc,1,0,rval(1:vvc))
deallocate(rval)
end if
end if
ftime = DCLOCK()
dttime = ftime-stime
ttime = ttime+dttime
stime = ftime
write(*,*)"<<< Model (Constraints) time = ",dttime
ttime2 = ttime2 + dttime
write(*,*)"<<< Model time = ",ttime2
write(*,*)"<<<"
rtnstat = IMPLreassure()
if (rtnstat /= 0) then
write(*,*)"<<< %ERROR% - Memory violation for resource-entity type = ",TRIM(IMPLreason(rtnstat))
stop
end if
logmessage = "<<< Reassure successful."
rtnstat = IMPLwritelog(logmessage)
c "Interface" the superstructure data i.e., export or write out the *.io, *.oi and *.iod files.
face = INOUT$
rtnstat = IMPLinterfacere(fact,form,fit,filter,focus,face,factor,fob,frames)
face = OUTIN$
rtnstat = IMPLinterfacere(fact,form,fit,filter,focus,face,factor,fob,frames)
face = INOUTDATA$
rtnstat = IMPLinterfacere(fact,form,fit,filter,focus,face,factor,fob,frames)
c "Presolve" and "solve" the industrial/manufacturing optimization problem (IOP/MOP).
rtnstat = IMPLpresolver(fact,form,fit,filter,focus,factorizer,fork,fresh,flashback,feedback)
if (rtnstat == INNON) then
write(*,*)"<<< %ERROR% - Invalid arguments."
stop
elseif (rtnstat > 0) then
write(*,*)"<<< %ERROR% - Invalid input."
stop
elseif (rtnstat < 0) then
write(*,*)"<<< %ERROR% - Not all variables/constraints converged - see *.tdt file."
flag = 1
rtnstat = IMPLstatics(fact,CONTOL,flag)
end if
setting = "ECLOSURE2"
write(*,*)"<<<"
write(*,*)"<<< Solve closure = ",IMPLretrieveSTATISTIC(setting)
write(*,*)"<<<"
ftime = DCLOCK()
dttime = ftime-stime
ttime = ttime+dttime
stime = ftime
write(*,*)"<<<"
write(*,*)"<<< Solve time = ",dttime
write(*,*)"<<<"
c Rerun/restart/repeat IMPL using different random-seeds by restoring the model-data and cycle-data from the
c binary/unformatted *.bdt file (see the render() routine which writes this file).
c
c This is useful for non-convex nonlinear (quality) that exhibit several local optima.
setting = "RANDSEED"
rseed = INT(IMPLretrieveSETTING(setting))
do i = 1,frequency
rtnstat = IMPLroot(fact)
rtnstat = IMPLrefresh(ALL)
rtnstat = IMPLrestore(fact,ALL)
rtnstat = IMPLreceiveSETTING(setting,DBLE(rseed+i))
rtnstat = IMPLmodelerv(fact,form,fit,filter,focus,filler,foreign,force=PARAMETER)
rtnstat = IMPLmodelerv(fact,form,fit,filter,focus,filler,foreign,force=VARIABLE)
rtnstat = IMPLmodelerc(fact,form,fit,filter,focus,filler,foreign,force=CONSTRAINT)
rtnstat = IMPLpresolver(fact,form,fit,filter,focus,factorizer,fork,fresh,flashback,feedback)
end do
c Save the solution-data ("original" problem) for the next run or execution if the warm-start is activated.
if (fuse == WARMSTART$) then
lun = INILUN
INQUIRE(UNIT=lun,OPENED=rtnstat)
do while (rtnstat)
lun = lun + 1
INQUIRE(UNIT=lun,OPENED=rtnstat)
end do
open(UNIT=lun,
& FILE=TRIM(fact)//"_vv.dta",
& STATUS="UNKNOWN",
& ACCESS="SEQUENTIAL",
& ACTION="WRITE",
& FORM="FORMATTED",
& SHARED,
& IOSTAT=rtnstat)
if (rtnstat == 0) then
allocate(rval(1:vvc))
call IMPLreview2(VARIABLE,vvc,1,0,rval(1:vvc))
do i = 1,vvc
write(lun,*)rval(i)
end do
deallocate(rval)
close(lun)
end if
end if
c "Interface" the solution data i.e., export or write out the solution(s) in the *.exl file and using
c *.oml file then "output" the selected solution variables results to the files specified.
frames = CHAR(0)
face = EXPORT$
rtnstat = IMPLinterfacere(fact,form,fit,filter,focus,face,factor,fob,frames)
face = OUTPUT$
rtnstat = IMPLinterfacere(fact,form,fit,filter,focus,face,factor,fob,frames)
ftime = DCLOCK()
dttime = ftime-stime
ttime = ttime+dttime
stime = ftime
write(*,*)"<<<"
write(*,*)"<<< Export time = ",dttime
write(*,*)"<<<"
ftime = DCLOCK()
dttime = ftime-stime
ttime = ttime+dttime
stime = ftime
write(*,*)"<<<"
write(*,*)"<<< Serialization time = ",dttime
write(*,*)"<<<"
c "Show" the various data for problem-solving, debugging and troubleshooting.
if (BTEST(fanfare,SHOWREPORT$)) then
rtnstat = IMPLreport(fact)
logmessage = "<<< Write report successful."
rtnstat = IMPLwritelog(logmessage)
end if
if (BTEST(fanfare,SHOWSUMMARY$)) then
rtnstat = IMPLsummary(fact)
logmessage = "<<< Write summary successful."
rtnstat = IMPLwritelog(logmessage)
end if
if (BTEST(fanfare,SHOWSTATICS$)) then
flag = 1
rtnstat = IMPLstatics(fact,CONTOL,flag)
logmessage = "<<< Write statics successful."
rtnstat = IMPLwritelog(logmessage)
end if
if (BTEST(fanfare,SHOWSLACKNESS$)) then
if (filter == QUALITY$) then
ptr_IMPLmodelerc = LOC(IMPLmodelerc)
rtnstat = IMPLslackness(fact,ptr_IMPLmodelerc,0d+0)
logmessage = "<<< Write slackness successful."
rtnstat = IMPLwritelog(logmessage)
end if
end if
if (BTEST(fanfare,SHOWSCALINGS$)) then
if ((form == SPARSIC$) .and. (filter == QUALITY$)) then
rtnstat = IMPLscalings(fact)
logmessage = "<<< Write scalings successful."
rtnstat = IMPLwritelog(logmessage)
end if
end if
if (BTEST(fanfare,SHOWSERIESSET$)) then
rtnstat = IMPLwriteall(fact,SERIESSET,0,0)
logmessage = "<<< Writeall series-set successful."
rtnstat = IMPLwritelog(logmessage)
end if
if (BTEST(fanfare,SHOWSIMPLESET$)) then
rtnstat = IMPLwriteall(fact,SIMPLESET,0,0)
logmessage = "<<< Writeall simple-set successful."
rtnstat = IMPLwritelog(logmessage)
end if
if (BTEST(fanfare,SHOWSYMBOLSET$)) then
rtnstat = IMPLwriteall(fact,SYMBOLSET,0,0)
logmessage = "<<< Writeall symbol-set successful."
rtnstat = IMPLwritelog(logmessage)
end if
if (BTEST(fanfare,SHOWCATALOG$)) then
rtnstat = IMPLwriteall(fact,CATALOG,0,0)
logmessage = "<<< Writeall catalog successful."
rtnstat = IMPLwritelog(logmessage)
end if
if (BTEST(fanfare,SHOWLIST$)) then
rtnstat = IMPLwriteall(fact,LIST,0,0)
logmessage = "<<< Writeall list successful."
rtnstat = IMPLwritelog(logmessage)
end if
if (BTEST(fanfare,SHOWPARAMETER$)) then
rtnstat = IMPLwriteall(fact,PARAMETER,0,0)
logmessage = "<<< Writeall parameter successful."
rtnstat = IMPLwritelog(logmessage)
end if
if (BTEST(fanfare,SHOWVARIABLE$)) then
rtnstat = IMPLwriteall(fact,VARIABLE,0,0)
logmessage = "<<< Writeall variable successful."
rtnstat = IMPLwritelog(logmessage)
end if
if (BTEST(fanfare,SHOWCONSTRAINT$)) then
rtnstat = IMPLwriteall(fact,CONSTRAINT,0,0)
logmessage = "<<< Writeall constraint successful."
rtnstat = IMPLwritelog(logmessage)
end if
if (BTEST(fanfare,SHOWFORMULA$)) then
rtnstat = IMPLwriteall(fact,FORMULA,0,0)
logmessage = "<<< Writeall formula successful."
rtnstat = IMPLwritelog(logmessage)
end if
c Show the model sensitivity with sparsity-pattern.
if (BTEST(fanfare,SHOWDERIVATIVE$)) then
ptr_IMPLmodelerc = LOC(IMPLmodelerc)
flag = WRITESENSITIVITY
rtnstat = IMPLwritesensitivity(fact,ptr_IMPLmodelerc,flag)
logmessage = "<<< Write sensitivity successful."
rtnstat = IMPLwritelog(logmessage)
end if
c Show model symbology with all variables and constraints as infix expressions.
if (BTEST(fanfare,SHOWEXPRESSION$)) then
if ((form == SYMBOLIC$) .or.
& (filter == QUANTITY$) .or. (filter == LOGISTICS$)) then
ptr_IMPLmodelerc = LOC(IMPLmodelerc)
flag = WRITESYMBOLOGY
rtnstat = IMPLwritesymbology(fact,ptr_IMPLmodelerc,flag)
logmessage = "<<< Write symbology successful."
rtnstat = IMPLwritelog(logmessage)
end if
end if
c Show model sensability matrices i.e., A, B, C, Q, xm and z data files.
if ((focus == ESTIMATION$) .and. (fork /= SVVE$) .and. (fork /= SSDE$)) then
flag=0
rtnstat = IMPLwritesplitability(fact,ptr_IMPLmodelerc,flag)
logmessage = "<<< Writeall splitability successful."
rtnstat = IMPLwritelog(logmessage)
end if
c Deallocate global internal memory.
rtnstat = IMPLrelease(ALL)
if (rtnstat == 0) then
logmessage = "<<< Release successful."
rtnstat = IMPLwritelog(logmessage)
else
logmessage = "<<< Release unsuccessful."
rtnstat = IMPLwritelog(logmessage)
end if
ftime = DCLOCK()
dttime = ftime-stime
ttime = ttime+dttime
stime = ftime
write(*,*)"<<<"
write(*,*)"<<< Total time = ",ttime
write(*,*)"<<<"
c Finally, completely setup the problem again and show the symbolic representation of the problem if the form is "sparsic"
c and the filter is "quality".
if (BTEST(fanfare,SHOWEXPRESSION$)) then
if ((form == SPARSIC$) .and. (filter == QUALITY$)) then
rtnstat = IMPLroot(fact)
rtnstat = IMPLreserve(fact,ALL)
rtnstat = IMPLrestore(fact,ALL)
form = SYMBOLIC$
rtnstat = IMPLmodelerv(fact,form,fit,filter,focus,filler,foreign,force=PARAMETER)
rtnstat = IMPLmodelerv(fact,form,fit,filter,focus,filler,foreign,force=VARIABLE)
rtnstat = IMPLmodelerc(fact,form,fit,filter,focus,filler,foreign,force=CONSTRAINT)
fork = SOLVERLESS$
fresh = FIRSTSESSION$
rtnstat = IMPLpresolver(fact,form,fit,filter,focus,factorizer,fork,fresh,flashback,feedback)
flag = WRITESYMBOLOGY
rtnstat = IMPLwritesymbology(fact,ptr_IMPLmodelerc,flag)
rtnstat = IMPLrelease(ALL)
logmessage = "<<< Write symbology successful."
rtnstat = IMPLwritelog(logmessage)
end if
end if
end program IMPL

More Related Content

What's hot

Introduction to c
Introduction to cIntroduction to c
Introduction to camol_chavan
 
Compiler design
Compiler designCompiler design
Compiler designsanchi29
 
Compiler question bank
Compiler question bankCompiler question bank
Compiler question bankArthyR3
 
C the basic concepts
C the basic conceptsC the basic concepts
C the basic conceptsAbhinav Vatsa
 
265 ge8151 problem solving and python programming - 2 marks with answers
265   ge8151 problem solving and python programming - 2 marks with answers265   ge8151 problem solving and python programming - 2 marks with answers
265 ge8151 problem solving and python programming - 2 marks with answersvithyanila
 
Staroletov Design by Contract, verification of Cyber-physical systems
Staroletov Design by Contract, verification of Cyber-physical systemsStaroletov Design by Contract, verification of Cyber-physical systems
Staroletov Design by Contract, verification of Cyber-physical systemsSergey Staroletov
 
Compiler Engineering Lab#2
Compiler Engineering Lab#2Compiler Engineering Lab#2
Compiler Engineering Lab#2MashaelQ
 
Cs6660 compiler design
Cs6660 compiler designCs6660 compiler design
Cs6660 compiler designhari2010
 
A brief introduction to C Language
A brief introduction to C LanguageA brief introduction to C Language
A brief introduction to C LanguageMohamed Elsayed
 
Notes of c programming 1st unit BCA I SEM
Notes of c programming  1st unit BCA I SEMNotes of c programming  1st unit BCA I SEM
Notes of c programming 1st unit BCA I SEMMansi Tyagi
 
Compiler gate question key
Compiler gate question keyCompiler gate question key
Compiler gate question keyArthyR3
 
C programming language
C programming languageC programming language
C programming languageMaha lakshmi
 

What's hot (20)

C programming part1
C programming part1C programming part1
C programming part1
 
Introduction to c
Introduction to cIntroduction to c
Introduction to c
 
Compiler design
Compiler designCompiler design
Compiler design
 
Compiler question bank
Compiler question bankCompiler question bank
Compiler question bank
 
C the basic concepts
C the basic conceptsC the basic concepts
C the basic concepts
 
C_Programming_Notes_ICE
C_Programming_Notes_ICEC_Programming_Notes_ICE
C_Programming_Notes_ICE
 
265 ge8151 problem solving and python programming - 2 marks with answers
265   ge8151 problem solving and python programming - 2 marks with answers265   ge8151 problem solving and python programming - 2 marks with answers
265 ge8151 problem solving and python programming - 2 marks with answers
 
Staroletov Design by Contract, verification of Cyber-physical systems
Staroletov Design by Contract, verification of Cyber-physical systemsStaroletov Design by Contract, verification of Cyber-physical systems
Staroletov Design by Contract, verification of Cyber-physical systems
 
C languaGE UNIT-1
C languaGE UNIT-1C languaGE UNIT-1
C languaGE UNIT-1
 
Compiler Engineering Lab#2
Compiler Engineering Lab#2Compiler Engineering Lab#2
Compiler Engineering Lab#2
 
Cs6660 compiler design
Cs6660 compiler designCs6660 compiler design
Cs6660 compiler design
 
A brief introduction to C Language
A brief introduction to C LanguageA brief introduction to C Language
A brief introduction to C Language
 
Learn C
Learn CLearn C
Learn C
 
C programming session7
C programming  session7C programming  session7
C programming session7
 
Notes of c programming 1st unit BCA I SEM
Notes of c programming  1st unit BCA I SEMNotes of c programming  1st unit BCA I SEM
Notes of c programming 1st unit BCA I SEM
 
Introduction to C Programming
Introduction to C ProgrammingIntroduction to C Programming
Introduction to C Programming
 
C programming session5
C programming  session5C programming  session5
C programming session5
 
Compiler gate question key
Compiler gate question keyCompiler gate question key
Compiler gate question key
 
C programming language
C programming languageC programming language
C programming language
 
Programming in c
Programming in cProgramming in c
Programming in c
 

Viewers also liked

Science ideas in context 2012
Science ideas in context 2012Science ideas in context 2012
Science ideas in context 2012opsonise
 
приспособительное поведение
приспособительное поведениеприспособительное поведение
приспособительное поведениеbiolog259
 
Using Twitter for News
Using Twitter for NewsUsing Twitter for News
Using Twitter for NewsDenis Pinsky
 
Memcache message queue
Memcache message queueMemcache message queue
Memcache message queueDmitry Sividov
 
Time Series Estimation of Gas Furnace Data in IMPL and CPLEX Industrial Model...
Time Series Estimation of Gas Furnace Data in IMPL and CPLEX Industrial Model...Time Series Estimation of Gas Furnace Data in IMPL and CPLEX Industrial Model...
Time Series Estimation of Gas Furnace Data in IMPL and CPLEX Industrial Model...Alkis Vazacopoulos
 
Students talk back: Opportunities for growth lie in student perceptions
Students talk back: Opportunities for growth lie in student perceptionsStudents talk back: Opportunities for growth lie in student perceptions
Students talk back: Opportunities for growth lie in student perceptionsLearning Forward
 
Збір лідерів
Збір лідерівЗбір лідерів
Збір лідерів08600 Vasilkov
 
Big data網站分析─google analytics學習筆記 (情報快訊與轉換功能)
Big data網站分析─google analytics學習筆記 (情報快訊與轉換功能) Big data網站分析─google analytics學習筆記 (情報快訊與轉換功能)
Big data網站分析─google analytics學習筆記 (情報快訊與轉換功能) Anna Su
 
Ispras (трудаков, коршунов)
Ispras (трудаков, коршунов)Ispras (трудаков, коршунов)
Ispras (трудаков, коршунов)Andzhey Arshavskiy
 
Deep Dive - BDD with RubyMotion
Deep Dive - BDD with RubyMotionDeep Dive - BDD with RubyMotion
Deep Dive - BDD with RubyMotionMatthew Salerno
 
Advanced property tracking Industrial Modeling Framework
Advanced property tracking Industrial Modeling FrameworkAdvanced property tracking Industrial Modeling Framework
Advanced property tracking Industrial Modeling FrameworkAlkis Vazacopoulos
 
Digital Society Laboratory (Аршавский)
Digital Society Laboratory (Аршавский)Digital Society Laboratory (Аршавский)
Digital Society Laboratory (Аршавский)Andzhey Arshavskiy
 
Supporting development with Rancher Server
Supporting development with Rancher ServerSupporting development with Rancher Server
Supporting development with Rancher ServerTom Bamford
 

Viewers also liked (20)

Science ideas in context 2012
Science ideas in context 2012Science ideas in context 2012
Science ideas in context 2012
 
приспособительное поведение
приспособительное поведениеприспособительное поведение
приспособительное поведение
 
Ismael jorge
Ismael jorgeIsmael jorge
Ismael jorge
 
Using Twitter for News
Using Twitter for NewsUsing Twitter for News
Using Twitter for News
 
Memcache message queue
Memcache message queueMemcache message queue
Memcache message queue
 
Animalsoundgame
AnimalsoundgameAnimalsoundgame
Animalsoundgame
 
Too 1 9
Too 1 9Too 1 9
Too 1 9
 
Time Series Estimation of Gas Furnace Data in IMPL and CPLEX Industrial Model...
Time Series Estimation of Gas Furnace Data in IMPL and CPLEX Industrial Model...Time Series Estimation of Gas Furnace Data in IMPL and CPLEX Industrial Model...
Time Series Estimation of Gas Furnace Data in IMPL and CPLEX Industrial Model...
 
Students talk back: Opportunities for growth lie in student perceptions
Students talk back: Opportunities for growth lie in student perceptionsStudents talk back: Opportunities for growth lie in student perceptions
Students talk back: Opportunities for growth lie in student perceptions
 
Web2
Web2Web2
Web2
 
Збір лідерів
Збір лідерівЗбір лідерів
Збір лідерів
 
Big data網站分析─google analytics學習筆記 (情報快訊與轉換功能)
Big data網站分析─google analytics學習筆記 (情報快訊與轉換功能) Big data網站分析─google analytics學習筆記 (情報快訊與轉換功能)
Big data網站分析─google analytics學習筆記 (情報快訊與轉換功能)
 
Ispras (трудаков, коршунов)
Ispras (трудаков, коршунов)Ispras (трудаков, коршунов)
Ispras (трудаков, коршунов)
 
Ih ace (1p312+1p326)
Ih ace (1p312+1p326)Ih ace (1p312+1p326)
Ih ace (1p312+1p326)
 
Dsl public
Dsl publicDsl public
Dsl public
 
Deep Dive - BDD with RubyMotion
Deep Dive - BDD with RubyMotionDeep Dive - BDD with RubyMotion
Deep Dive - BDD with RubyMotion
 
Syntax
SyntaxSyntax
Syntax
 
Advanced property tracking Industrial Modeling Framework
Advanced property tracking Industrial Modeling FrameworkAdvanced property tracking Industrial Modeling Framework
Advanced property tracking Industrial Modeling Framework
 
Digital Society Laboratory (Аршавский)
Digital Society Laboratory (Аршавский)Digital Society Laboratory (Аршавский)
Digital Society Laboratory (Аршавский)
 
Supporting development with Rancher Server
Supporting development with Rancher ServerSupporting development with Rancher Server
Supporting development with Rancher Server
 

Similar to Console manual impl

Advanced Parameter Estimation (APE) for Motor Gasoline Blending (MGB) Indust...
Advanced Parameter Estimation (APE) for Motor Gasoline Blending (MGB)  Indust...Advanced Parameter Estimation (APE) for Motor Gasoline Blending (MGB)  Indust...
Advanced Parameter Estimation (APE) for Motor Gasoline Blending (MGB) Indust...Alkis Vazacopoulos
 
Server-Solvers-Interacter-Interfacer-Modeler-Presolver Libraries and Executab...
Server-Solvers-Interacter-Interfacer-Modeler-Presolver Libraries and Executab...Server-Solvers-Interacter-Interfacer-Modeler-Presolver Libraries and Executab...
Server-Solvers-Interacter-Interfacer-Modeler-Presolver Libraries and Executab...Alkis Vazacopoulos
 
Partial Differential Equations (PDE’s) Industrial Modeling Framework (PDE-IMF)
Partial Differential Equations (PDE’s)  Industrial Modeling Framework (PDE-IMF)Partial Differential Equations (PDE’s)  Industrial Modeling Framework (PDE-IMF)
Partial Differential Equations (PDE’s) Industrial Modeling Framework (PDE-IMF)Alkis Vazacopoulos
 
Advanced Production Accounting of an Olefins Plant Industrial Modeling Framew...
Advanced Production Accounting of an Olefins Plant Industrial Modeling Framew...Advanced Production Accounting of an Olefins Plant Industrial Modeling Framew...
Advanced Production Accounting of an Olefins Plant Industrial Modeling Framew...Alkis Vazacopoulos
 
Finite Impulse Response Estimation of Gas Furnace Data in IMPL Industrial Mod...
Finite Impulse Response Estimation of Gas Furnace Data in IMPL Industrial Mod...Finite Impulse Response Estimation of Gas Furnace Data in IMPL Industrial Mod...
Finite Impulse Response Estimation of Gas Furnace Data in IMPL Industrial Mod...Alkis Vazacopoulos
 
Advanced Process Monitoring IMF
Advanced Process Monitoring IMFAdvanced Process Monitoring IMF
Advanced Process Monitoring IMFAlkis Vazacopoulos
 
Rapport_Cemracs2012
Rapport_Cemracs2012Rapport_Cemracs2012
Rapport_Cemracs2012Jussara F.M.
 
20230419-LLaMA-Adapter_ Efficient Fine-tuning of Language Models with Zero-in...
20230419-LLaMA-Adapter_ Efficient Fine-tuning of Language Models with Zero-in...20230419-LLaMA-Adapter_ Efficient Fine-tuning of Language Models with Zero-in...
20230419-LLaMA-Adapter_ Efficient Fine-tuning of Language Models with Zero-in...San Kim
 
A Lossless FBAR Compressor
A Lossless FBAR CompressorA Lossless FBAR Compressor
A Lossless FBAR CompressorPhilip Alipour
 
Advanced Production Accounting
Advanced Production AccountingAdvanced Production Accounting
Advanced Production AccountingAlkis Vazacopoulos
 
Learning spark ch11 - Machine Learning with MLlib
Learning spark ch11 - Machine Learning with MLlibLearning spark ch11 - Machine Learning with MLlib
Learning spark ch11 - Machine Learning with MLlibphanleson
 
LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attent...
LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attent...LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attent...
LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attent...Po-Chuan Chen
 
Matlab for diploma students(1)
Matlab for diploma students(1)Matlab for diploma students(1)
Matlab for diploma students(1)Retheesh Raj
 
Advanced Modeling of Industrial Optimization Problems
Advanced Modeling of Industrial Optimization ProblemsAdvanced Modeling of Industrial Optimization Problems
Advanced Modeling of Industrial Optimization ProblemsAlkis Vazacopoulos
 
Debugging and optimization of multi-thread OpenMP-programs
Debugging and optimization of multi-thread OpenMP-programsDebugging and optimization of multi-thread OpenMP-programs
Debugging and optimization of multi-thread OpenMP-programsPVS-Studio
 
On Applying Or-Parallelism and Tabling to Logic Programs
On Applying Or-Parallelism and Tabling to Logic ProgramsOn Applying Or-Parallelism and Tabling to Logic Programs
On Applying Or-Parallelism and Tabling to Logic ProgramsLino Possamai
 
Advanced Production Accounting of a Flotation Plant
Advanced Production Accounting of a Flotation PlantAdvanced Production Accounting of a Flotation Plant
Advanced Production Accounting of a Flotation PlantAlkis Vazacopoulos
 
Compiler Construction for DLX Processor
Compiler Construction for DLX Processor Compiler Construction for DLX Processor
Compiler Construction for DLX Processor Soham Kulkarni
 

Similar to Console manual impl (20)

Pooling optimization problem
Pooling optimization problemPooling optimization problem
Pooling optimization problem
 
Advanced Parameter Estimation (APE) for Motor Gasoline Blending (MGB) Indust...
Advanced Parameter Estimation (APE) for Motor Gasoline Blending (MGB)  Indust...Advanced Parameter Estimation (APE) for Motor Gasoline Blending (MGB)  Indust...
Advanced Parameter Estimation (APE) for Motor Gasoline Blending (MGB) Indust...
 
Server-Solvers-Interacter-Interfacer-Modeler-Presolver Libraries and Executab...
Server-Solvers-Interacter-Interfacer-Modeler-Presolver Libraries and Executab...Server-Solvers-Interacter-Interfacer-Modeler-Presolver Libraries and Executab...
Server-Solvers-Interacter-Interfacer-Modeler-Presolver Libraries and Executab...
 
Partial Differential Equations (PDE’s) Industrial Modeling Framework (PDE-IMF)
Partial Differential Equations (PDE’s)  Industrial Modeling Framework (PDE-IMF)Partial Differential Equations (PDE’s)  Industrial Modeling Framework (PDE-IMF)
Partial Differential Equations (PDE’s) Industrial Modeling Framework (PDE-IMF)
 
Advanced Production Accounting of an Olefins Plant Industrial Modeling Framew...
Advanced Production Accounting of an Olefins Plant Industrial Modeling Framew...Advanced Production Accounting of an Olefins Plant Industrial Modeling Framew...
Advanced Production Accounting of an Olefins Plant Industrial Modeling Framew...
 
Finite Impulse Response Estimation of Gas Furnace Data in IMPL Industrial Mod...
Finite Impulse Response Estimation of Gas Furnace Data in IMPL Industrial Mod...Finite Impulse Response Estimation of Gas Furnace Data in IMPL Industrial Mod...
Finite Impulse Response Estimation of Gas Furnace Data in IMPL Industrial Mod...
 
Advanced Process Monitoring IMF
Advanced Process Monitoring IMFAdvanced Process Monitoring IMF
Advanced Process Monitoring IMF
 
Rapport_Cemracs2012
Rapport_Cemracs2012Rapport_Cemracs2012
Rapport_Cemracs2012
 
20230419-LLaMA-Adapter_ Efficient Fine-tuning of Language Models with Zero-in...
20230419-LLaMA-Adapter_ Efficient Fine-tuning of Language Models with Zero-in...20230419-LLaMA-Adapter_ Efficient Fine-tuning of Language Models with Zero-in...
20230419-LLaMA-Adapter_ Efficient Fine-tuning of Language Models with Zero-in...
 
A Lossless FBAR Compressor
A Lossless FBAR CompressorA Lossless FBAR Compressor
A Lossless FBAR Compressor
 
Advanced Production Accounting
Advanced Production AccountingAdvanced Production Accounting
Advanced Production Accounting
 
Learning spark ch11 - Machine Learning with MLlib
Learning spark ch11 - Machine Learning with MLlibLearning spark ch11 - Machine Learning with MLlib
Learning spark ch11 - Machine Learning with MLlib
 
Ial impl-imf-book-1-0
Ial impl-imf-book-1-0Ial impl-imf-book-1-0
Ial impl-imf-book-1-0
 
LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attent...
LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attent...LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attent...
LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attent...
 
Matlab for diploma students(1)
Matlab for diploma students(1)Matlab for diploma students(1)
Matlab for diploma students(1)
 
Advanced Modeling of Industrial Optimization Problems
Advanced Modeling of Industrial Optimization ProblemsAdvanced Modeling of Industrial Optimization Problems
Advanced Modeling of Industrial Optimization Problems
 
Debugging and optimization of multi-thread OpenMP-programs
Debugging and optimization of multi-thread OpenMP-programsDebugging and optimization of multi-thread OpenMP-programs
Debugging and optimization of multi-thread OpenMP-programs
 
On Applying Or-Parallelism and Tabling to Logic Programs
On Applying Or-Parallelism and Tabling to Logic ProgramsOn Applying Or-Parallelism and Tabling to Logic Programs
On Applying Or-Parallelism and Tabling to Logic Programs
 
Advanced Production Accounting of a Flotation Plant
Advanced Production Accounting of a Flotation PlantAdvanced Production Accounting of a Flotation Plant
Advanced Production Accounting of a Flotation Plant
 
Compiler Construction for DLX Processor
Compiler Construction for DLX Processor Compiler Construction for DLX Processor
Compiler Construction for DLX Processor
 

More from Alkis Vazacopoulos

Automatic Fine-tuning Xpress-MP to Solve MIP
Automatic Fine-tuning Xpress-MP to Solve MIPAutomatic Fine-tuning Xpress-MP to Solve MIP
Automatic Fine-tuning Xpress-MP to Solve MIPAlkis Vazacopoulos
 
Amazing results with ODH|CPLEX
Amazing results with ODH|CPLEXAmazing results with ODH|CPLEX
Amazing results with ODH|CPLEXAlkis Vazacopoulos
 
Bia project poster fantasy football
Bia project poster  fantasy football Bia project poster  fantasy football
Bia project poster fantasy football Alkis Vazacopoulos
 
NFL Game schedule optimization
NFL Game schedule optimization NFL Game schedule optimization
NFL Game schedule optimization Alkis Vazacopoulos
 
2017 Business Intelligence & Analytics Corporate Event Stevens Institute of T...
2017 Business Intelligence & Analytics Corporate Event Stevens Institute of T...2017 Business Intelligence & Analytics Corporate Event Stevens Institute of T...
2017 Business Intelligence & Analytics Corporate Event Stevens Institute of T...Alkis Vazacopoulos
 
Very largeoptimizationparallel
Very largeoptimizationparallelVery largeoptimizationparallel
Very largeoptimizationparallelAlkis Vazacopoulos
 
Optimization Direct: Introduction and recent case studies
Optimization Direct: Introduction and recent case studiesOptimization Direct: Introduction and recent case studies
Optimization Direct: Introduction and recent case studiesAlkis Vazacopoulos
 
Informs 2016 Solving Planning and Scheduling Problems with CPLEX
Informs 2016 Solving Planning and Scheduling Problems with CPLEX Informs 2016 Solving Planning and Scheduling Problems with CPLEX
Informs 2016 Solving Planning and Scheduling Problems with CPLEX Alkis Vazacopoulos
 
Missing-Value Handling in Dynamic Model Estimation using IMPL
Missing-Value Handling in Dynamic Model Estimation using IMPL Missing-Value Handling in Dynamic Model Estimation using IMPL
Missing-Value Handling in Dynamic Model Estimation using IMPL Alkis Vazacopoulos
 
Industrial Modeling Service (IMS-IMPL)
Industrial Modeling Service (IMS-IMPL)Industrial Modeling Service (IMS-IMPL)
Industrial Modeling Service (IMS-IMPL)Alkis Vazacopoulos
 
Dither Signal Design Problem (DSDP) for Closed-Loop Estimation Industrial Mod...
Dither Signal Design Problem (DSDP) for Closed-Loop Estimation Industrial Mod...Dither Signal Design Problem (DSDP) for Closed-Loop Estimation Industrial Mod...
Dither Signal Design Problem (DSDP) for Closed-Loop Estimation Industrial Mod...Alkis Vazacopoulos
 
Distillation Curve Optimization Using Monotonic Interpolation
Distillation Curve Optimization Using Monotonic InterpolationDistillation Curve Optimization Using Monotonic Interpolation
Distillation Curve Optimization Using Monotonic InterpolationAlkis Vazacopoulos
 
Multi-Utility Scheduling Optimization (MUSO) Industrial Modeling Framework (M...
Multi-Utility Scheduling Optimization (MUSO) Industrial Modeling Framework (M...Multi-Utility Scheduling Optimization (MUSO) Industrial Modeling Framework (M...
Multi-Utility Scheduling Optimization (MUSO) Industrial Modeling Framework (M...Alkis Vazacopoulos
 
Hybrid Dynamic Simulation (HDS) Industrial Modeling Framework (HDS-IMF)
Hybrid Dynamic Simulation (HDS)  Industrial Modeling Framework (HDS-IMF)Hybrid Dynamic Simulation (HDS)  Industrial Modeling Framework (HDS-IMF)
Hybrid Dynamic Simulation (HDS) Industrial Modeling Framework (HDS-IMF)Alkis Vazacopoulos
 
Advanced Production Control Using Julia & IMPL
Advanced Production Control Using Julia & IMPLAdvanced Production Control Using Julia & IMPL
Advanced Production Control Using Julia & IMPLAlkis Vazacopoulos
 

More from Alkis Vazacopoulos (20)

Automatic Fine-tuning Xpress-MP to Solve MIP
Automatic Fine-tuning Xpress-MP to Solve MIPAutomatic Fine-tuning Xpress-MP to Solve MIP
Automatic Fine-tuning Xpress-MP to Solve MIP
 
Data mining 2004
Data mining 2004Data mining 2004
Data mining 2004
 
Amazing results with ODH|CPLEX
Amazing results with ODH|CPLEXAmazing results with ODH|CPLEX
Amazing results with ODH|CPLEX
 
Bia project poster fantasy football
Bia project poster  fantasy football Bia project poster  fantasy football
Bia project poster fantasy football
 
NFL Game schedule optimization
NFL Game schedule optimization NFL Game schedule optimization
NFL Game schedule optimization
 
2017 Business Intelligence & Analytics Corporate Event Stevens Institute of T...
2017 Business Intelligence & Analytics Corporate Event Stevens Institute of T...2017 Business Intelligence & Analytics Corporate Event Stevens Institute of T...
2017 Business Intelligence & Analytics Corporate Event Stevens Institute of T...
 
Posters 2017
Posters 2017Posters 2017
Posters 2017
 
Very largeoptimizationparallel
Very largeoptimizationparallelVery largeoptimizationparallel
Very largeoptimizationparallel
 
Retail Pricing Optimization
Retail Pricing Optimization Retail Pricing Optimization
Retail Pricing Optimization
 
Optimization Direct: Introduction and recent case studies
Optimization Direct: Introduction and recent case studiesOptimization Direct: Introduction and recent case studies
Optimization Direct: Introduction and recent case studies
 
Informs 2016 Solving Planning and Scheduling Problems with CPLEX
Informs 2016 Solving Planning and Scheduling Problems with CPLEX Informs 2016 Solving Planning and Scheduling Problems with CPLEX
Informs 2016 Solving Planning and Scheduling Problems with CPLEX
 
ODHeuristics
ODHeuristicsODHeuristics
ODHeuristics
 
Missing-Value Handling in Dynamic Model Estimation using IMPL
Missing-Value Handling in Dynamic Model Estimation using IMPL Missing-Value Handling in Dynamic Model Estimation using IMPL
Missing-Value Handling in Dynamic Model Estimation using IMPL
 
Industrial Modeling Service (IMS-IMPL)
Industrial Modeling Service (IMS-IMPL)Industrial Modeling Service (IMS-IMPL)
Industrial Modeling Service (IMS-IMPL)
 
Dither Signal Design Problem (DSDP) for Closed-Loop Estimation Industrial Mod...
Dither Signal Design Problem (DSDP) for Closed-Loop Estimation Industrial Mod...Dither Signal Design Problem (DSDP) for Closed-Loop Estimation Industrial Mod...
Dither Signal Design Problem (DSDP) for Closed-Loop Estimation Industrial Mod...
 
Xmr im
Xmr imXmr im
Xmr im
 
Distillation Curve Optimization Using Monotonic Interpolation
Distillation Curve Optimization Using Monotonic InterpolationDistillation Curve Optimization Using Monotonic Interpolation
Distillation Curve Optimization Using Monotonic Interpolation
 
Multi-Utility Scheduling Optimization (MUSO) Industrial Modeling Framework (M...
Multi-Utility Scheduling Optimization (MUSO) Industrial Modeling Framework (M...Multi-Utility Scheduling Optimization (MUSO) Industrial Modeling Framework (M...
Multi-Utility Scheduling Optimization (MUSO) Industrial Modeling Framework (M...
 
Hybrid Dynamic Simulation (HDS) Industrial Modeling Framework (HDS-IMF)
Hybrid Dynamic Simulation (HDS)  Industrial Modeling Framework (HDS-IMF)Hybrid Dynamic Simulation (HDS)  Industrial Modeling Framework (HDS-IMF)
Hybrid Dynamic Simulation (HDS) Industrial Modeling Framework (HDS-IMF)
 
Advanced Production Control Using Julia & IMPL
Advanced Production Control Using Julia & IMPLAdvanced Production Control Using Julia & IMPL
Advanced Production Control Using Julia & IMPL
 

Recently uploaded

Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingrakeshbaidya232001
 
the ladakh protest in leh ladakh 2024 sonam wangchuk.pptx
the ladakh protest in leh ladakh 2024 sonam wangchuk.pptxthe ladakh protest in leh ladakh 2024 sonam wangchuk.pptx
the ladakh protest in leh ladakh 2024 sonam wangchuk.pptxhumanexperienceaaa
 
Microscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptxMicroscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptxpurnimasatapathy1234
 
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINEMANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINESIVASHANKAR N
 
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...ranjana rawat
 
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICSHARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICSRajkumarAkumalla
 
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...ranjana rawat
 
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...Soham Mondal
 
Introduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptxIntroduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptxupamatechverse
 
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Dr.Costas Sachpazis
 
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130Suhani Kapoor
 
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escortsranjana rawat
 
HARMONY IN THE NATURE AND EXISTENCE - Unit-IV
HARMONY IN THE NATURE AND EXISTENCE - Unit-IVHARMONY IN THE NATURE AND EXISTENCE - Unit-IV
HARMONY IN THE NATURE AND EXISTENCE - Unit-IVRajaP95
 
chaitra-1.pptx fake news detection using machine learning
chaitra-1.pptx  fake news detection using machine learningchaitra-1.pptx  fake news detection using machine learning
chaitra-1.pptx fake news detection using machine learningmisbanausheenparvam
 

Recently uploaded (20)

Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writing
 
the ladakh protest in leh ladakh 2024 sonam wangchuk.pptx
the ladakh protest in leh ladakh 2024 sonam wangchuk.pptxthe ladakh protest in leh ladakh 2024 sonam wangchuk.pptx
the ladakh protest in leh ladakh 2024 sonam wangchuk.pptx
 
Roadmap to Membership of RICS - Pathways and Routes
Roadmap to Membership of RICS - Pathways and RoutesRoadmap to Membership of RICS - Pathways and Routes
Roadmap to Membership of RICS - Pathways and Routes
 
Microscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptxMicroscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptx
 
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
 
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINEMANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
 
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptxExploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
 
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICSHARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
 
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
 
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
 
Introduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptxIntroduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptx
 
Call Us -/9953056974- Call Girls In Vikaspuri-/- Delhi NCR
Call Us -/9953056974- Call Girls In Vikaspuri-/- Delhi NCRCall Us -/9953056974- Call Girls In Vikaspuri-/- Delhi NCR
Call Us -/9953056974- Call Girls In Vikaspuri-/- Delhi NCR
 
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
 
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
 
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
 
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
 
HARMONY IN THE NATURE AND EXISTENCE - Unit-IV
HARMONY IN THE NATURE AND EXISTENCE - Unit-IVHARMONY IN THE NATURE AND EXISTENCE - Unit-IV
HARMONY IN THE NATURE AND EXISTENCE - Unit-IV
 
chaitra-1.pptx fake news detection using machine learning
chaitra-1.pptx  fake news detection using machine learningchaitra-1.pptx  fake news detection using machine learning
chaitra-1.pptx fake news detection using machine learning
 

Console manual impl

  • 1.                         i  M  P  l     Industrial  Modeling  &  Programming  Language     “Console  Manual"                       i  n  d  u  s  t  r  I  A  L  g  o  r  i  t  h  m  s    LLC.   www.industrialgorithms.com                 Version  1.0   April  2014   IAL-­‐IMPL-­‐CM-­‐1-­‐0.docx       Copyright  and  Property  of  Industrial  Algorithms  LLC.    
  • 2. Introduction     The  IMPL  console  executable  (IMPL.exe)  can  be  called  from  any  DOS  command  prompt  window  where   its  Intel  Fortran  source  code  can  be  found  in  Appendix  A.    The  IMPL  console  is  useful  given  that  it  allows   you  to  model  and  solve  problems  configured  in  an  IML  (Industrial  Modeling  Language)  file.    Problems   coded  using  IPL  (Industrial  Programming  Language)  in  many  computer  programming  languages  can  use   the  IMPL  console  source  code  as  a  prototype.     The  IMPL  console  reads  several  input  files  and  writes  several  output  files  which  are  described  in  this   document.    There  are  several  console  flags  that  can  be  specified  as  command  line  arguments  and  are   described  below.     IMPL  Console  Flags     There  are  twelve  (12)  flags  or  command  line  arguments  that  can  be  specified  and  they  are  as  follows   with  their  respective  possible  values  and  defaults  (shown  in  bolded  italics).     -feed = IMLfile The  feed  flag  value  must  specify  the  path  and  file  name  (without  the  *.iml  extension  or  file  type)  of  the   IML  file  to  be  modeled  and  solved.       -form = sparsic | symbolic For  linear  problems,  the  form  flag  values  of  sparsic  and  symbolic  are  equivalent  given  that  the   problem  matrix  has  no  nonlinear  or  non-­‐constant  derivatives  or  expressions  and  IMPL  supplies  all  of  the   first-­‐order  partial  derivatives  or  coefficients  analytically.    For  nonlinear  problems,  IMPL  represents  the   model  in  a  “sparsic”  form  where  only  the  sparsity-­‐pattern  is  supplied  by  IMPL  for  each  constraint  and   numerical  perturbations  are  used  to  compute  the  non-­‐constant  or  nonlinear  first-­‐order  partial   derivatives  using  machine-­‐coded  constraint  residual  calculations  i.e.,  the  constraint  equations  are  hard-­‐ coded  into  IMPL’s  native  computer  programming  language.    However,  IMPL  also  supports  a  “symbolic”   form  whereby  the  constraint  residual  calculations  are  computed  using  nonlinear  expressions  supplied  by   IMPL  in  a  byte-­‐coded  or  parsed  tokenized  format  sometimes  referred  to  as  postfix  or  reverse  Polish  
  • 3. notation  (RPN).    The  “symbolic”  form  is  useful  given  that  it  can  be  used  to  output  the  nonlinear   constraint  expressions  into  a  human-­‐readable  flat-­‐file.     -fit = discrete | distributed The  fit  flag  value  of  discrete assumes  a  uniform  digitization  of  time  i.e.,  discrete-­‐time  with  a  single   time-­‐period  duration  and  can  be  applied  to  quantity,  logistics  and  quality  types  of  problems  whereas  the   distributed  fit  flag  value  is  not  valid  for  logistics  problems  at  this  time.    IMPL’s  distributed-­‐time   formulation  is  similar  to  a  continuous-­‐time  model  with  a  common  or  global  time-­‐grid  except  that  in  the   former  the  time-­‐points  are  known  exogenously.     -filter = quantity | logistics | quality The  filter  flag  value  of  quantity  assumes  that  all  logic  variables  are  fixed  to  either  0  (zero)  or  1  (one)   and  there  are  no  quality  variables  present  and  solves  a  linear  programming  (LP)  problem.    The  filter  flag   value  of  logistics  solves  a  mixed-­‐integer  linear  programming  (MILP)  problem  where  the  logic  variables   are  finite  i.e.,  lie  between  0  or  1.    The  filter  flag  value  of  quality  solves  a  nonlinear  programming  (NLP)   problem  where  the  logic  variables  must  be  fixed  to  either  0  or  1.    A  fourth  filter  flag  value  of   qualogistics  is  possible  but  is  not  available  where  this  would  model  and  solve  a  mixed-­‐integer   nonlinear  programming  (MINLP)  problem  (future  implementation).       -focus = simulation | estimation | optimization The  focus  flag  value  allows  for  simulation  and  estimation  types  of  problems  but  currently  only  the   optimization  value  is  supported.     -factor = 1.0 The  factor  flag  value  is  a  real  positive  number  and  can  be  used  to  scale  quantity  variables  only  i.e.,  rates,   flows  and  holdups.     -factorizer = semisolverless | y12m | ysmp | nspiv | ma28 | pardiso The  factorizer  flag  value  is  used  to  factorize  or  perform  LU  decomposition  on  a  square  system  or  set  of   linear  and/or  nonlinear  equations  if  it  exists.    If  the  number  of  free  and/or  finite  quantity  and  quality   variables  equals  the  number  of  linear  and  nonlinear  equality  constraints  then  simulation  using  direct   factorization  of  the  sparse  Jacobian  matrix  of  first-­‐order  partial  derivatives  can  be  used  to  solve  the  
  • 4. problem  ignoring  all  inequality  constraints  and  variable  bounds.    The  factorizer  flag  pardiso  requires  the   Intel  Math  Kernel  Library  (MKL)  to  execute  a  parallel  implementation  of  LU  decomposition.     -fork = solverless | coinmp | glpk | lpsolve | scip | cplex | gurobi | lindo | xpress ipopt | conopt | knitro slpqpe_coinmp | slpqpe_glpk | slpqpe_lpsolve | slpqpe_scip | slpqpe_cplex | slpqpe_gurobi | slpqpe_lindo | slpqpe_xpress secqpe_y12m | secqpe_ysmp | secqpe_nspiv | secqpe_ma28 | secqpe_pardiso secqpe_sorve | secqpe_y12m_sorve | secqpe_ysmp_sorve | secqpe_nspiv_sorve | secqpe_ma28_sorve | secqpe_pardiso_sorve The  fork  flag  value  is  used  to  solve  LP,  QP,  MILP  and  NLP  problems.    The  solvers  slpqpe_  solve  nonlinear   LP  or  QP  problems  using  the  various  LP  and  QP  solvers  suffixed.    The  solvers  secqpe_  solve  nonlinear   equality-­‐constrained  QP  problems  using  the  various  LU  decompositions  suffixed  which  are  useful  for   data  reconciliation  and  regression  problems  (i.e.,  least  squares,  error-­‐in-­‐variables  and  parameter   estimation  types  of  problems).    The  suffixed  solvers  with  _sorve perform  a  post  sensitivity  analysis  to   compute  the  observability,  redundancy  and  variability  estimates  using  the  known  sparse  Jacobian  matrix   from  the  secqpe_  solve.    If  variable  bounds  and  constraint  inequalities  are  required  then  solve  with  an   NLP  first  then  warm-­‐start  with  slpqpe_sorve  to  perform  the  post  sensitivity  analysis.     Note  that  the  solvers  scip, cplex, gurobi, lindo, xpress, conopt and  knitro  all  require   commercial  licensing  agreements  from  their  vendors.     -flashback = binaryfile | binaryram | flatfile The  flashback  flag  value  is  used  to  save  or  retain  integer-­‐feasible  solutions  found  during  the  branch-­‐and-­‐ bound  type  of  enumerative  searches  employed  in  MILP  solvers.    All  integer-­‐feasible  solutions  (variable   results  or  responses  only)  are  saved  to  binary  or  unformatted  files  with  extension  *.bdt  where  a  “_n”  is   suffixed  to  the  IML  file  problem  name  with  “n”  denoting  the  solution  number  found.    The  flashback  flag   value  of  binaryram  means  that  the  solution  is  also  saved  to  RAM  memory  and  a  value  of  flatfile  will   save  the  solution  in  a  formatted  *.exl  file.     -fanfare = 1073741823 (2^30 - 1)  
  • 5. The  fanfare  flag  value  is  an  integer  bit  mask  with  0  to  30  bits.    Depending  on  the  value  of  fanfare,  the   various  IMPL  output  files  will  be  written  to  the  same  directory  as  the  IML  file.    For  more  details  please   refer  to  Appendix  A.     -fuse = coldstart | warmstart The  fuse  flag  value  is  only  valid  for  nonlinear  problems  where  a  warmstart  will  use  the  solution  variable   result  values  from  a  previous  solve  (if  they  exist)  as  initial-­‐values  or  starting-­‐points  for  the  next  solve.     -frequency = 0 The  frequency  flag  value  sets  the  number  of  solving  cycles  within  a  solving  execution  or  run.    It  is   essentially  a  do-­‐loop  starting  from  1  to  frequency  which  will  randomize  the  initial-­‐values,  starting-­‐points   or  default-­‐results  starting  from  the  random  seed  setting  and  simply  incrementing  it  by  the  loop  iterate   or  counter  i.e.,  initial_value = (lower_bound+upper_bound)/2 + (upper_bound- lower_bound)*random_number(random_seed).     IMPL  Input  Files     IMPL.lic License  file  for  IMPL  that  must  be  located  in  the  same  directory  as  the  IMPL  executable.     IMPL.set | *.set Settings  file  for  IMPL  that  may  be  located  in  the  same  directory  as  the  IMPL  executable  or  another  *.set   file  located  in  the  same  directory  as  the  IML  file  with  the  same  name.     IMPL.mem | *.mem Memory  file  for  IMPL  that  may  be  located  in  the  same  directory  as  the  IMPL  executable  or  another   *.mem  file  located  in  the  same  directory  as  the  IML  file  with  the  same  name.    The  memory  file  is  used  to   allocate  the  various  resource-­‐entities  of  IMPL.     IMPL.solver | *.solver Individual  solver  settings  files  for  the  various  IMPL  solvers  and  they  may  be  located  in  the  same  directory   as  the  IMPL  executable  or  another  *.solver  file  located  in  the  same  directory  as  the  IML  file  with  the   same  name.  
  • 6.   *.iml Industrial  (input)  modeling  language  files  containing  the  IML  frames  configuring  a  problem.     *.oml Output  modeling  language  files  with  the  same  name  and  location  as  the  IML  file  where  selected  variable   results  and  constraint  residuals  can  be  written  to  user-­‐specified  files.     *.ups UOPSS  files  (or  universal  production/process  superstructure)  written  by  the  IALConstructer.py  Python   2.3.5  code  found  in  the  Dia  open-­‐source  application  which  can  be  included  into  any  IMF  file.    This  *.ups   file  can  contain  the  complete  or  partial  construction  data  of  the  network,  graph,  diagram  or  flowsheet  of   the  problem.     *.ilp | *.inl Foreign  files  with  scalar-­‐based  variable  and  constraint  names  can  be  used  to  extend  the  IMPL  modeling   with  user-­‐created  and/or  shared  variables  and  user-­‐created  constraints.    The  format  of  these  files  is   similar  to  the  CPLEX  LP  files  where  for  nonlinear  model  extensions,  the  *.inl  file  allows  nonlinear   expressions  to  be  specified.    If  a  quantity  or  logistics  (LP,  QP  or  MILP)  problem  is  being  solved  then  only   the  *.ilp  is  recognized  and  if  a  quality  (NLP)  problem  is  being  solved  then  only  *.inl  files  are  respected.       Both  the  *.ilp  and  *.inl  files  include  the  following  sections:  “Objective”,  “Constraints”  and  “Bounds”.       There  is  also  a  “Binaries”  section  for  *.ilp  files  only  and  both  files  must  have  the  last  statement  as  “End”   where  in-­‐line  comments  are  indicated  by  the  “”  backslash  character.     IMPL  Output  Files     *.io Input  and  output  file  containing  the  inputs  and  outputs  for  each  IML  file  problem  UOPSS  superstructure.     *.iod Input  and  output  data  file  containing  the  input  and  output  data  for  each  IML  file  problem  UOPSS   superstructure.  
  • 7.   *.oi Output  and  input  file  containing  the  outputs  to  inputs  for  each  IML  file  problem  UOPSS  superstructure.     *.exl Export  files  with  the  same  name  and  location  as  the  IML  file  where  selected  variable  result  values  are   written  in  various  EXL  frames  similar  to  the  IML  frames.     *.bdt Binary  (unformatted)  files  storing  the  independent  sets,  catalogs,  lists,  parameters  and  formulas.    These   unformatted  files  are  useful  when  re-­‐running  IMPL  without  having  to  re-­‐read  the  *.iml  file.     *_n.bdt Binary  (unformatted)  files  suffixed  by  an  integer-­‐feasible  solution  number  “_n”  with  the  same  name  and   location  as  the  IML  file  where  all  variable  results  for  a  single  integer-­‐feasible  solution  found  in  the  MILP   solvers  are  written  in  unformatted  form.     *.ldt Log  files  with  the  same  name  and  location  as  the  IML  file  where  IMPL  progress  messages  are  displayed  if   USELOGFILE = 1  is  set  else  all  messages  will  be  sent  to  the  console  or  command  prompt  window.     *.rdt Report  files  with  the  same  name  and  location  as  the  IML  file  where  IMPL  resource-­‐entity  details  are   displayed.     *.sdt Summary  files  with  the  same  name  and  location  as  the  IML  file  where  IMPL  modeling  and  presolving   details  are  displayed  such  as  the  number  of  variables,  constraints  and  derivatives  included  or  excluded   from  the  problem.     *.tdt Statics  files  with  the  same  name  and  location  as  the  IML  file  where  if  any  IMPL  presolved  constraints  are   found  to  be  infeasible  (i.e.,  violated  greater  than  a  tolerance)  at  a  solution,  are  displayed.      “Static”   constraints  are  IMPL’s  term  for  constraints  that  are  presolved  or  removed  from  the  problem  by  IMPL  
  • 8. before  the  solvers  (with  their  own  presolving)  are  called  where  “dynamic”  constraints  in  this  context   mean  constraints  that  are  variable  in  the  solver.    The  IMPL  presolver  may  or  may  not  “prempt”  the   presolving  if  an  infeasible  or  inconsistent  constraint  is  found.     *.jdt Sensitivity  or  derivatives  files  with  the  same  name  and  location  as  the  IML  file  where  the  first-­‐order   partial  derivative  sparse  Jacobian  matrix  elements  are  displayed.     *.ndt Symbolic  or  mnemonic  files  with  the  same  name  and  location  as  the  IML  file  where  a  human-­‐readable   form  of  both  the  linear  and  nonlinear  constraints  are  displayed  for  every  variable  and  constraint  known   to  the  problem.   *.imp, *.imv, *.imc Three  files  containing  all  of  the  parameters  (including  all  of  the  sets,  catalogs,  lists  and  formulas),   variables  and  constraints  created  by  IMPL  to  model  the  problem.    These  files  can  be  used  to  reference   the  names  found  in  the  *.dta  files  below.     *.dtr Series-­‐set  (or  range-­‐set)  files  with  the  same  name  and  location  as  the  IML  file  where  all  SERIES-­‐SET   resource-­‐entity  roster-­‐enumerations  are  output.     *.dts Simple-­‐set  files  with  the  same  name  and  location  as  the  IML  file  where  all  SIMPLE-­‐SET  resource-­‐entity   roster-­‐enumerations  are  output.     *.dty Symbol-­‐set    files  with  the  same  name  and  location  as  the  IML  file  where  all  SYMBOL-­‐SET  resource-­‐entity   roster-­‐enumerations  are  output.     *.dtg Catalog  files  with  the  same  name  and  location  as  the  IML  file  where  all  CATALOG  resource-­‐entity  roster-­‐ enumerations  are  output.    
  • 9. *.dtl List  files  with  the  same  name  and  location  as  the  IML  file  where  all  LIST  resource-­‐entity  roster-­‐ enumerations  are  output.     *.dtp Parameter    files  with  the  same  name  and  location  as  the  IML  file  where  all  PARAMETER  resource-­‐entity   roster-­‐enumerations  are  output.     *.dtv Variable    files  with  the  same  name  and  location  as  the  IML  file  where  all  VARIABLE  resource-­‐entity   roster-­‐enumerations  are  output.     *.dtw “Vetistic”  (vetting)  or  statistic  files  with  the  same  name  and  location  as  the  IML  file  where  all  VARIABLE   and  CONSTRAINT  resource-­‐entity  roster-­‐enumerations  are  output  when  the  solvers  suffixed  with  _sorve     are  used.    This  file  outputs  the  observability  and  redundancy  metrics,  variances,  “maximum  power”   gross-­‐error  detection  statistics  and  confidence-­‐intervals.     *.dtc Constraint    files  with  the  same  name  and  location  as  the  IML  file  where  all  CONSTRAINT  resource-­‐entity   roster-­‐enumerations  are  output.     *.dtf Formula    files  with  the  same  name  and  location  as  the  IML  file  where  all  FORMULA  resource-­‐entity   roster-­‐enumerations  are  output.     Appendix  A  –  IMPL  Console  Source  Code  in  Intel  Fortran  (IMPL.exe)     Provided  below  is  the  Intel  Fortran  source  code  which  calls  the  various  routines  found  in  the  IMPL   system  architecture  SIIMPLE  (Server,  Interacter,  Interfacer,  Modeler,  Presolver  Libraries).    We  have   included  this  source  code  to  show  how  to  call  IMPL  with  SIIMPL  from  other  computer  programming   languages  such  as  C,  C++,  C#,  Java,  Python,  Excel/VBA,  etc.    
  • 10. program IMPL use IFWIN use IMPLserver cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c INDUSTRIAL ALGORITHMS LLC. CONFIDENTIAL & PROPRIETARY cccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc implicit none c Project "feed" data name which also includes the path. character(BASESTRINGLEN*LINESTRINGLENMULT) :: feed c Problem "fact" data name which also includes the path. character(BASESTRINGLEN*LINESTRINGLENMULT) :: fact c Data "face" or stream i.e., either "import/out" or "export/in". integer(4) :: face c Model "factor" or scaling for dominant or primary phenomenological dimension. real(8) :: factor c Model "sipher" (cipher, secret-code) for encryption and deencryption. integer(8) :: fob c Model "form "or structure i.e., either "sparsic" or "symbolic". integer(4) :: form c Model "fit" or slot usually the temporal dimension. integer(4) :: fit c Model "filter" or select. integer(4) :: filter c Model "focus" or syllabus. integer(4) :: focus c Model "filler" or supplemental pointing to the supplierlib() routine. integer(4) :: filler c Model "foreign" ILP or INL file. character(BASESTRINGLEN*LINESTRINGLENMULT) :: foreign c Semi-solve "factorizer" or semi-solver. integer(4) :: factorizer c Solve "fork" or solver. integer(4) :: fork c Solve fresh or "stale". integer(4) :: fresh c Savings format for intermediate integer-feasible solutions when they are found during the search. integer(4) :: flashback c Feedback or callback "summons" routine. integer(4) :: feedback c Model and solve fanfare or "show". integer(4) :: fanfare c Solve from a previously solved solution (and not necessarily converged) i.e., "fuse" this new solution c with a preceding solution ("warm-start" v. "cold-start"). integer(4) :: fuse c  Rerun/restart/repeat  the  modeling  and  solving  in  a  loop  a  specified  number  of  times  by  randomizing  the  initial-­‐   c  values  or  starting-­‐points  using  the  random-­‐seed.   c   c  The  frequency  ("stride")  is  the  number  of  cycles  plus  one  (+1)  per  execution  or  run  of  this  console  program  where     c  zero  (0)  means  only  the  initial,  starting  or  default  run  is  performed.                    integer(4)  ::  frequency                  integer(4)  ::  rseed    
  • 11. c Data frames separated by the ASCII NULL character i.e., CHAR(0) in fortran or "/n" in C. character(BASESTRINGLEN*PAGESTRINGLENMULT) :: frames integer(4) :: flag c Command line argument string value. character(BASESTRINGLEN*LINESTRINGLENMULT) :: sargument, sargument1, sargument2 interface function IMPLinterfaceri(fact,form,fit,filter,focus,face,factor,fob,frames) #if stdcalling == 1 cDEC$ ATTRIBUTES DLLIMPORT, STDCALL, REFERENCE, DECORATE, ALIAS : "IMPLinterfaceri" :: IMPLINTERFACERI #else cDEC$ ATTRIBUTES DLLIMPORT, ALIAS : "IMPLinterfaceri" :: IMPLINTERFACERI #endif integer(4) :: IMPLinterfaceri character(*), intent(in) :: fact cDEC$ ATTRIBUTES REFERENCE :: fact integer(4), intent(in) :: form cDEC$ ATTRIBUTES VALUE :: form integer(4), intent(in) :: fit cDEC$ ATTRIBUTES VALUE :: fit integer(4), intent(in) :: filter cDEC$ ATTRIBUTES VALUE :: filter integer(4), intent(in) :: focus cDEC$ ATTRIBUTES VALUE :: focus integer(4), intent(in) :: face cDEC$ ATTRIBUTES VALUE :: face real(8), intent(in) :: factor cDEC$ ATTRIBUTES VALUE :: factor integer(8), intent(in) :: fob cDEC$ ATTRIBUTES VALUE :: fob character(*), intent(in) :: frames cDEC$ ATTRIBUTES REFERENCE :: frames end function IMPLinterfaceri function IMPLinterfacere(fact,form,fit,filter,focus,face,factor,fob,frames) #if stdcalling == 1 cDEC$ ATTRIBUTES DLLIMPORT, STDCALL, REFERENCE, DECORATE, ALIAS : "IMPLinterfacere" :: IMPLINTERFACERE #else cDEC$ ATTRIBUTES DLLIMPORT, ALIAS : "IMPLinterfacere" :: IMPLINTERFACERE #endif integer(4) :: IMPLinterfacere character(*), intent(in) :: fact cDEC$ ATTRIBUTES REFERENCE :: fact integer(4), intent(in) :: form cDEC$ ATTRIBUTES VALUE :: form integer(4), intent(in) :: fit cDEC$ ATTRIBUTES VALUE :: fit integer(4), intent(in) :: filter cDEC$ ATTRIBUTES VALUE :: filter integer(4), intent(in) :: focus cDEC$ ATTRIBUTES VALUE :: focus integer(4), intent(in) :: face cDEC$ ATTRIBUTES VALUE :: face real(8), intent(in) :: factor cDEC$ ATTRIBUTES VALUE :: factor integer(8), intent(in) :: fob cDEC$ ATTRIBUTES VALUE :: fob character(*), intent(in) :: frames cDEC$ ATTRIBUTES REFERENCE :: frames end function IMPLinterfacere function IMPLmodelerv(fact,form,fit,filter,focus,filler,foreign,force) #if stdcalling == 1 cDEC$ ATTRIBUTES DLLIMPORT, STDCALL, REFERENCE, DECORATE, ALIAS : "IMPLmodelerv" :: IMPLMODELERV #else cDEC$ ATTRIBUTES DLLIMPORT, ALIAS : "IMPLmodelerv" :: IMPLMODELERV #endif integer(4) :: IMPLmodelerv character(*), intent(in) :: fact cDEC$ ATTRIBUTES REFERENCE :: fact integer(4), intent(in) :: form cDEC$ ATTRIBUTES VALUE :: form integer(4), intent(in) :: fit cDEC$ ATTRIBUTES VALUE :: fit integer(4), intent(in) :: filter cDEC$ ATTRIBUTES VALUE :: filter integer(4), intent(in) :: focus cDEC$ ATTRIBUTES VALUE :: focus integer(4), intent(in) :: filler cDEC$ ATTRIBUTES REFERENCE :: filler character(*), optional, intent(in) :: foreign cDEC$ ATTRIBUTES REFERENCE :: foreign integer(4), optional, intent(in) :: force cDEC$ ATTRIBUTES REFERENCE :: force end function IMPLmodelerv function IMPLmodelerc(fact,form,fit,filter,focus,filler,foreign,force) #if stdcalling == 1 cDEC$ ATTRIBUTES DLLIMPORT, STDCALL, REFERENCE, DECORATE, ALIAS : "IMPLmodelerc" :: IMPLMODELERC #else
  • 12. cDEC$ ATTRIBUTES DLLIMPORT, ALIAS : "IMPLmodelerc" :: IMPLMODELERC #endif integer(4) :: IMPLmodelerc character(*), intent(in) :: fact cDEC$ ATTRIBUTES REFERENCE :: fact integer(4), intent(in) :: form cDEC$ ATTRIBUTES VALUE :: form integer(4), intent(in) :: fit cDEC$ ATTRIBUTES VALUE :: fit integer(4), intent(in) :: filter cDEC$ ATTRIBUTES VALUE :: filter integer(4), intent(in) :: focus cDEC$ ATTRIBUTES VALUE :: focus integer(4), intent(in) :: filler cDEC$ ATTRIBUTES REFERENCE :: filler character(*), optional, intent(in) :: foreign cDEC$ ATTRIBUTES REFERENCE :: foreign integer(4), optional, intent(in) :: force cDEC$ ATTRIBUTES REFERENCE :: force end function IMPLmodelerc function IMPLpresolver(fact,form,fit,filter,focus,factorizer,fork,fresh,flashback,feedback) #if stdcalling == 1 cDEC$ ATTRIBUTES DLLIMPORT, STDCALL, REFERENCE, DECORATE, ALIAS : "IMPLpresolver" :: IMPLPRESOLVER #else cDEC$ ATTRIBUTES DLLIMPORT, ALIAS : "IMPLpresolver" :: IMPLPRESOLVER #endif integer(4) :: IMPLpresolver character(*), intent(in) :: fact cDEC$ ATTRIBUTES REFERENCE :: fact integer(4), intent(in) :: form cDEC$ ATTRIBUTES VALUE :: form integer(4), intent(in) :: fit cDEC$ ATTRIBUTES VALUE :: fit integer(4), intent(in) :: filter cDEC$ ATTRIBUTES VALUE :: filter integer(4), intent(in) :: focus cDEC$ ATTRIBUTES VALUE :: focus integer(4), intent(in) :: factorizer cDEC$ ATTRIBUTES VALUE :: factorizer integer(4), intent(in) :: fork cDEC$ ATTRIBUTES VALUE :: fork integer(4), intent(in) :: fresh cDEC$ ATTRIBUTES VALUE :: fresh integer(4), intent(in) :: flashback cDEC$ ATTRIBUTES VALUE :: flashback integer(4), intent(in) :: feedback cDEC$ ATTRIBUTES REFERENCE :: feedback end function IMPLpresolver end interface c Integer pointer to modeling subroutine location. integer(4) :: ptr_IMPLmodelerc c Temporary allocatable storage when required. integer(4), allocatable :: ival(:) real(8), allocatable :: rval(:) character(BASESTRINGLEN), allocatable :: sval(:) c Miscellaneous. integer(4) :: i, rtnstat, lun character(BASESTRINGLEN*LINESTRINGLENMULT) :: logmessage character(BASESTRINGLEN) :: setting character(BASESTRINGLEN) :: startdate, finishdate, sizelimits, hostname, username c Timings for performance monitoring or profiling. c c * Note that to compute running times then use the following code. c c ftime = DCLOCK() c dttime = ftime-stime c ttime = ttime+dttime c stime = ftime c c * Note that CPU_TIME() returns the sum of time over all threads which does return the elapsed time. c Instead DCLOCK() returns the elapsed time and requires module IFPORT. real(8) :: stime, ftime, dttime, ttime, ttime2 c Start the clock. ttime = 0 stime = DCLOCK() cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c Specify a version number for which will be maintained as a standalone entity. c c Year.Month.DayIncrement i.e., 2007-12-05 5th increment per day = 7.12.055 (major.minor.update release). c c This versioning scheme is simple and accurate and only useful for tracking changes continuously. It is
  • 13. c not a snapshot or build release number with "major.minor.patch" release structure. c * Note that "-1" means to write to standard output which is usually the screen. rtnstat = IMPLwritebanner(-1) write(*,"(1X,A)")"<<< i M P l - E x e c u t a b l e (console)" write(*,"(1X,A)")"<<<" write(*,"(1X,A)")"<<< Release # 1.0" write(*,"(1X,A)")"<<< Version # 12.5.141" write(*,"(1X,A)")"<<<" write(*,"(1X,4A)")"<<< Last Compiled: ",__DATE__," ",__TIME__ write(*,"(1X,A)")"<<<" cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c Parse the command line arguments for the required flags. feed = "c:IMPLIMLfile" fact = feed form = SPARSIC$ ! form = SYMBOLIC$ fit = DISCRETE$ ! fit = DISTRIBUTE$ filter = QUANTITY$ ! filter = LOGISTICS$ ! filter = QUALITY$ c Simulation, Estimation and Optimization "Interoperability". ! focus = SIMULATION$ ! focus = ESTIMATION$ focus = OPTIMIZATION$ factor = 1d+0 factorizer = SEMISOLVERLESS$ ! factorizer = Y12M$ ! factorizer = YSMP$ ! factorizer = NSPIV$ ! factorizer = MA28$ ! factorizer = PARDISO$ fork = SOLVERLESS$ ! fork = COINMP$ ! fork = GLPK$ ! fork = LPSOLVE$ ! fork = SCIP$ ! fork = CPLEX$ ! fork = GUROBI$ ! fork = LINDO$ ! fork = OPTONOMY$ ! fork = XPRESS$ !SQP's ! fork = IPOPT$ ! fork = CONOPT$ ! fork = KNITRO$ ! fork = NOVA$ ! fork = WORHP$ !SLP's ! fork = SLPQPE_COINMP$ ! fork = SLPQPE_GLPK$ ! fork = SLPQPE_LPSOLVE$ ! fork = SLPQPE_SCIP$ ! fork = SLPQPE_CPLEX$ ! fork = SLPQPE_GUROBI$ ! fork = SLPQPE_OPTONOMY$ ! fork = SLPQPE_XPRESS$ ! fork = SLPQPE_IPOPT$ ! fork = SECQPE_Y12M$ ! fork = SECQPE_YSMP$ ! fork = SECQPE_NSPIV$ ! fork = SECQPE_MA28$ ! fork = SECQPE_PARDISO$ ! fork = SECQPE_SORVE$ ! fork = SECQPE_Y12M_SORVE$ ! fork = SECQPE_YSMP_SORVE$ ! fork = SECQPE_NSPIV_SORVE$ ! fork = SECQPE_MA28_SORVE$ ! fork = SECQPE_PARDISO_SORVE$ c Suitability (svve), Steadyability (ssde) and Scrumability (sfcme). ! fork = SVVE$ ! fork = SSDE$ ! fork = SFCME$
  • 14. fanfare = SHOWALL$ fuse = COLDSTART$ ! fuse = WARMSTART$ frequency = 0 fob = 0 frames = CHAR(0) c Get the library and function addresses for the filler, supplemental, external modeler, etc. which will provide the c necessary modeling for "black-blank" unit-operations. c c * Note that if the filler or supplemental routine is not found, then the return status is either negative or zero (0) and c hence filler = 0. filler = loadlibrary("C:IndustrialAlgorithmsPlatformIMPLIMPLsupplierDebugIMPLsupplier.dll"//CHAR(0)) if (filler > 0) then filler = getprocaddress(filler,"IMPLsupplierlib"//CHAR(0)) else filler = 0 end if fresh = FIRSTSESSION$ c Save, cache, store, persist, etc. integer-feasible solutions to an *.exl file as well as the default *.bdt binary file. flashback = FLATFILE$ c Point to the "recall()" routine provided by the "server". feedback = LOC(IMPLrecall) c The command line arguments (flags) can be specified as follows: c c * Note that if the second argument (after the "=" sign) is not recognizable as a valid value then an exception or c error occurs. c c impl.exe -feed="" c -form=sparsic c -fit=discrete c -filter=logistics c -focus=optimization c -factor=1 c -factorizer=y12m c -fork=lpsolve c -flashback=flatfile c -fanfare=1073741823 c -fuse=cold c -frequency=0 do i = 1,COMMAND_ARGUMENT_COUNT() call GET_COMMAND_ARGUMENT(i,sargument) sargument1 = sargument(1:INDEX(sargument,"=")) sargument2 = sargument(INDEX(sargument,"=")+1:BASESTRINGLEN*LINESTRINGLENMULT) select case (sargument1) case ("-feed=") if (TRIM(sargument2) /= "") then feed = TRIM(sargument2) fact = feed else write(*,*)"<<< %ERROR% - unknown -feed= argument present." stop end if write(*,*)"<<< feed = ",TRIM(sargument2) write(*,*)"<<< fact = ",TRIM(sargument2) case ("-form=") if (TRIM(sargument2) == "sparsic") then form = SPARSIC$ elseif (TRIM(sargument2) == "symbolic") then form = SYMBOLIC$ else write(*,*)"<<< %ERROR% - unknown -form= argument present." stop end if write(*,*)"<<< form = ",TRIM(sargument2)," = ",form case ("-fit=") if (TRIM(sargument2) == "discrete") then fit = DISCRETE$ elseif (TRIM(sargument2) == "distribute") then fit = DISTRIBUTE$ else write(*,*)"<<< %ERROR% - unknown -fit= argument present."
  • 15. stop end if write(*,*)"<<< fit = ",TRIM(sargument2)," = ",fit case ("-filter=") if (TRIM(sargument2) == "quantity") then filter = QUANTITY$ elseif (TRIM(sargument2) == "logistics") then filter = LOGISTICS$ elseif (TRIM(sargument2) == "quality") then filter = QUALITY$ else write(*,*)"<<< %ERROR% - unknown -filter= argument present." stop end if write(*,*)"<<< filter = ",TRIM(sargument2)," = ",filter case ("-focus=") if (TRIM(sargument2) == "simulation") then focus = SIMULATION$ elseif (TRIM(sargument2) == "estimation") then focus = ESTIMATION$ elseif (TRIM(sargument2) == "optimization") then focus = OPTIMIZATION$ else write(*,*)"<<< %ERROR% - unknown -focus= argument present." stop end if write(*,*)"<<< focus = ",TRIM(sargument2)," = ",focus case ("-factor=") if (TRIM(sargument2) /= "") then read(sargument2,*)factor factor = ABS(MIN(INFIN,factor)) else write(*,*)"<<< %ERROR% - no -factor= argument present." stop end if write(*,*)"<<< factor = ",factor case ("-factorizer=") if (TRIM(sargument2) == "") then factorizer = SEMISOLVERLESS$ elseif (TRIM(sargument2) == "y12m") then factorizer = Y12M$ elseif (TRIM(sargument2) == "ysmp") then factorizer = YSMP$ elseif (TRIM(sargument2) == "nspiv") then factorizer = NSPIV$ elseif (TRIM(sargument2) == "ma28") then factorizer = MA28$ elseif (TRIM(sargument2) == "pardiso") then factorizer = PARDISO$ else write(*,*)"<<< %ERROR% - unknown -factorizer= argument present." stop end if write(*,*)"<<< factorizer = ",TRIM(sargument2)," = ",factorizer case ("-fork=") if (TRIM(sargument2) == "") then fork = SOLVERLESS$ elseif (TRIM(sargument2) == "coinmp") then fork = COINMP$ elseif (TRIM(sargument2) == "glpk") then fork = GLPK$ elseif (TRIM(sargument2) == "lpsolve") then fork = LPSOLVE$ elseif (TRIM(sargument2) == "scip") then fork = SCIP$ elseif (TRIM(sargument2) == "cplex") then fork = CPLEX$ elseif (TRIM(sargument2) == "gurobi") then fork = GUROBI$ elseif (TRIM(sargument2) == "xpress") then fork = XPRESS$ elseif (TRIM(sargument2) == "conopt") then fork = CONOPT$ elseif (TRIM(sargument2) == "ipopt") then fork = IPOPT$ elseif (TRIM(sargument2) == "knitro") then fork = KNITRO$ elseif (TRIM(sargument2) == "nova") then fork = NOVA$ elseif (TRIM(sargument2) == "worhp") then
  • 16. fork = WORHP$ elseif (TRIM(sargument2) == "slpqpe_coinmp") then fork = SLPQPE_COINMP$ elseif (TRIM(sargument2) == "slpqpe_glpk") then fork = SLPQPE_GLPK$ elseif (TRIM(sargument2) == "slpqpe_lpsolve") then fork = SLPQPE_LPSOLVE$ elseif (TRIM(sargument2) == "slpqpe_scip") then fork = SLPQPE_SCIP$ elseif (TRIM(sargument2) == "slpqpe_cplex") then fork = SLPQPE_CPLEX$ elseif (TRIM(sargument2) == "slpqpe_gurobi") then fork = SLPQPE_GUROBI$ elseif (TRIM(sargument2) == "slpqpe_optonomy") then fork = SLPQPE_OPTONOMY$ elseif (TRIM(sargument2) == "slpqpe_xpress") then fork = SLPQPE_XPRESS$ elseif (TRIM(sargument2) == "secqpe_y12m") then fork = SECQPE_Y12M$ elseif (TRIM(sargument2) == "secqpe_ysmp") then fork = SECQPE_YSMP$ elseif (TRIM(sargument2) == "secqpe_nspiv") then fork = SECQPE_NSPIV$ elseif (TRIM(sargument2) == "secqpe_ma28") then fork = SECQPE_MA28$ elseif (TRIM(sargument2) == "secqpe_pardiso") then fork = SECQPE_PARDISO$ elseif (TRIM(sargument2) == "secqpe_sorve") then fork = SECQPE_SORVE$ elseif (TRIM(sargument2) == "secqpe_y12m_sorve") then fork = SECQPE_Y12M_SORVE$ elseif (TRIM(sargument2) == "secqpe_ysmp_sorve") then fork = SECQPE_YSMP_SORVE$ elseif (TRIM(sargument2) == "secqpe_nspiv_sorve") then fork = SECQPE_NSPIV_SORVE$ elseif (TRIM(sargument2) == "secqpe_ma28_sorve") then fork = SECQPE_MA28_SORVE$ elseif (TRIM(sargument2) == "secqpe_pardiso_sorve") then fork = SECQPE_PARDISO_SORVE$ else write(*,*)"<<< %ERROR% - unknown -fork= argument present." stop end if write(*,*)"<<< fork = ",TRIM(sargument2)," = ",fork case ("-flashback=") if (TRIM(sargument2) == "") then flashback = BINARYFILE$ elseif (TRIM(sargument2) == "binaryfile") then flashback = BINARYFILE$ elseif (TRIM(sargument2) == "binaryram") then flashback = BINARYRAM$ elseif (TRIM(sargument2) == "flatfile") then flashback = FLATFILE$ else write(*,*)"<<< %ERROR% - unknown -flashback= argument present." stop end if write(*,*)"<<< flashback = ",TRIM(sargument2)," = ",flashback case ("-fanfare=") if (TRIM(sargument2) /= "") then read(sargument2,*)fanfare fanfare = ABS(fanfare) show$ = fanfare end if write(*,*)"<<< fanfare = ",TRIM(sargument2)," = ",fanfare case ("-fuse=") if (TRIM(sargument2) == "cold") then fuse = COLDSTART$ elseif (TRIM(sargument2) == "warm") then fuse = WARMSTART$ else write(*,*)"<<< %ERROR% - unknown -fuse= argument present." stop end if write(*,*)"<<< fuse = ",TRIM(sargument2)," = ",fuse case ("-frequency=") if (TRIM(sargument2) /= "") then read(sargument2,*)frequency frequency = ABS(frequency) else write(*,*)"<<< %ERROR% - no -frequency= argument present." stop end if
  • 17. write(*,*)"<<< frequency = ",frequency end select end do show$ = fanfare start$ = fuse stride$ = frequency c Specify the foreign ILP or INL file and if it exists, it will be used to augment or extend the matrix. foreign = TRIM(fact)//".ilp" if ((filter == QUALITY$) .or. (filter == QUALOGISTICS$)) then foreign = TRIM(fact)//".inl" end if supplementary$ = foreign c If "symbolic-form" specified but the solving-system is of the "sparsic-form" only then solve the c "sparsic-form". c c * Note that at the moment only IPOPT and SLPQPE can be of both the "sparsic" and "symbolic" forms. if ((fork == CONOPT$) .or. (fork == KNITRO$) .or. & (fork == NOVA$) .or. (fork == WORHP$)) then form = SPARSIC$ end if c Only allow "symbolic-form" with XPRESS-SLP and LINDO-SLP given that these are not possible to be called c using "sparsic-form". if ((fork == XPRESS$) .or. (fork == LINDO$)) then form = SYMBOLIC$ end if c Only allow discrete-time for logistics. if (filter == LOGISTICS$) then fit = DISCRETE$ end if c Only allow our nonlinear SLPQPE_ solver as the fork if filter equal "quality" and a LP solver has been specified. if (filter == QUALITY$) then if (fork == COINMP$) then fork = SLPQPE_COINMP$ elseif (fork == GLPK$) then fork = SLPQPE_GLPK$ elseif (fork == LPSOLVE$) then fork = SLPQPE_LPSOLVE$ elseif (fork == SCIP$) then fork = SLPQPE_SCIP$ elseif (fork == CPLEX$) then fork = SLPQPE_CPLEX$ elseif (fork == GUROBI$) then fork = SLPQPE_GUROBI$ end if end if write(*,*)"<<<" write(*,*)"<<<",TRIM(fact) write(*,*)"<<<" c Initialize or establish the environment using the settings and license files. rtnstat = IMPLroot(fact) if (rtnstat == INNON) then write(*,*)"<<< %ERROR% - Invalid or missing license file." stop elseif (rtnstat > 0) then write(*,*)"<<< %ERROR% - Missing settings file." stop elseif (rtnstat < 0) then write(*,*)"<<< %WARNING% - Number of missing settings = ",-rtnstat end if logmessage = "<<<" rtnstat = IMPLwritelog(logmessage) logmessage = "<<< Root successful." rtnstat = IMPLwritelog(logmessage) c Initialize or allocate the global memory using the memory file. rtnstat = IMPLreserve(fact,ALL) if (rtnstat == INNON) then write(*,*)"<<< %ERROR% - Invalid or missing license file." stop elseif (rtnstat > 0) then write(*,*)"<<< %ERROR% - Missing memory file." stop elseif (rtnstat < 0) then
  • 18. write(*,*)"<<< %WARNING% - Missing memory setting." end if logmessage = "<<< Reserve successful." rtnstat = IMPLwritelog(logmessage) ftime = DCLOCK() dttime = ftime-stime ttime = ttime+dttime stime = ftime write(*,*)"<<<" write(*,*)"<<< Initialization time = ",dttime write(*,*)"<<<" c "Interface" the industrial/manufacturing optimization problem data. c c Interfacing the problem means reading in, inputing or importing the problem from the industrial/manufacturing c modeling language file (*.iml). face = IMPORT$ frames = CHAR(0) rtnstat = IMPLinterfaceri(fact,form,fit,filter,focus,face,factor,fob,frames) if (rtnstat == INNON) then write(*,*)"<<< %ERROR% - Invalid arguments." stop elseif (rtnstat > 0) then write(*,*)"<<< %ERROR% - Issue parsing import-file on line = ",rtnstat stop elseif (rtnstat < 0) then write(*,*)"<<< %WARNING% - Issue parsing import-file on line = ",ABS(rtnstat) end if rtnstat = IMPLreassure() if (rtnstat /= 0) then write(*,*)"<<< %ERROR% - Memory violation for resource-entity type = ",TRIM(IMPLreason(rtnstat)) stop end if logmessage = "<<< Reassure successful." rtnstat = IMPLwritelog(logmessage) ftime = DCLOCK() dttime = ftime-stime ttime = ttime+dttime stime = ftime write(*,*)"<<<" write(*,*)"<<< Import time = ",dttime write(*,*)"<<<" c "Serialize" or persist the problem-data i.e., sets, catalogs, lists, parameters and formulas representing the model-data c (master-data) and cycle-data (transactional-data). c c * Note that the "problem-data" (model-data and cycle-data) is converted to "matrix-data" in the "modeler" where it c creates/generates the variables (columns), constraints (rows) and derivatives (Jacobian/Hessian) (and expressions). rtnstat = IMPLrender(fact,ALL) if (rtnstat == 0) then logmessage = "<<< Render successful." rtnstat = IMPLwritelog(logmessage) else logmessage = "<<< Render unsuccessful." rtnstat = IMPLwritelog(logmessage) end if c "Model" the industrial/manufacturing optimization problem (IOP/MOP). c c Modeling the problem creates/generates the variables and constraints and any dependent sets, catalogs, lists and parameters c necessary to model all of the physical (structural), procedural (operational), projectional and phenomenological details. c In addition, the derivatives and expressions are also created or generated in the "modeler". c First, model the sets, catalogs, lists and parameters ("setup"). rtnstat = IMPLmodelerv(fact,form,fit,filter,focus,filler,foreign,force=PARAMETER) if (rtnstat == INNON) then write(*,*)"<<< %ERROR% - Invalid arguments." stop end if ftime = DCLOCK() dttime = ftime-stime ttime = ttime+dttime stime = ftime write(*,*)"<<<" write(*,*)"<<< Model (Sets, Lists, Parameters) time = ",dttime ttime2 = dttime c Second, model the variables ("specify"). rtnstat = IMPLmodelerv(fact,form,fit,filter,focus,filler,foreign,force=VARIABLE) if (rtnstat == INNON) then write(*,*)"<<< %ERROR% - Invalid arguments." stop end if ftime = DCLOCK() dttime = ftime-stime
  • 19. ttime = ttime+dttime stime = ftime write(*,*)"<<< Model (Variables) time = ",dttime ttime2 = ttime2 + dttime c If this is a "warm-start" then open the variables' results data file if it exists and read in the result values c for the "original" problem i.e., previous solution-data. if ((fuse == WARMSTART$) .and. (fork /= SECQPE_SORVE$)) then lun = INILUN INQUIRE(UNIT=lun,OPENED=rtnstat) do while (rtnstat) lun = lun + 1 INQUIRE(UNIT=lun,OPENED=rtnstat) end do open(UNIT=lun, & FILE=TRIM(fact)//"_vv.dta", & STATUS="OLD", & ACCESS="SEQUENTIAL", & ACTION="READ", & FORM="FORMATTED", & SHARED, & IOSTAT=rtnstat) if (rtnstat == 0) then allocate(rval(1:vvc)) do i = 1,vvc read(lun,*)rval(i) end do close(lun) rtnstat = IMPLrevise2(VARIABLE,vvc,1,0,rval(1:vvc)) deallocate(rval) end if end if c Third (last), model the constraints ("specificate/simulate/stipulate"). c c * Note that only in the constraints section of the modeling do we require the formulas. rtnstat = IMPLmodelerc(fact,form,fit,filter,focus,filler,foreign,force=CONSTRAINT) if (rtnstat == INNON) then write(*,*)"<<< %ERROR% - Invalid arguments." stop elseif (rtnstat > 0) then write(*,*)"<<< %ERROR% - Invalid input." stop end if if ((fuse == WARMSTART$) .and. (fork == SECQPE_SORVE$)) then lun = INILUN INQUIRE(UNIT=lun,OPENED=rtnstat) do while (rtnstat) lun = lun + 1 INQUIRE(UNIT=lun,OPENED=rtnstat) end do open(UNIT=lun, & FILE=TRIM(fact)//"_vv.dta", & STATUS="OLD", & ACCESS="SEQUENTIAL", & ACTION="READ", & FORM="FORMATTED", & SHARED, & IOSTAT=rtnstat) if (rtnstat == 0) then allocate(rval(1:vvc)) do i = 1,vvc read(lun,*)rval(i) end do close(lun) rtnstat = IMPLrevise2(VARIABLE,vvc,1,0,rval(1:vvc)) deallocate(rval) end if end if ftime = DCLOCK() dttime = ftime-stime ttime = ttime+dttime stime = ftime write(*,*)"<<< Model (Constraints) time = ",dttime ttime2 = ttime2 + dttime write(*,*)"<<< Model time = ",ttime2 write(*,*)"<<<" rtnstat = IMPLreassure() if (rtnstat /= 0) then write(*,*)"<<< %ERROR% - Memory violation for resource-entity type = ",TRIM(IMPLreason(rtnstat)) stop end if logmessage = "<<< Reassure successful." rtnstat = IMPLwritelog(logmessage) c "Interface" the superstructure data i.e., export or write out the *.io, *.oi and *.iod files. face = INOUT$ rtnstat = IMPLinterfacere(fact,form,fit,filter,focus,face,factor,fob,frames)
  • 20. face = OUTIN$ rtnstat = IMPLinterfacere(fact,form,fit,filter,focus,face,factor,fob,frames) face = INOUTDATA$ rtnstat = IMPLinterfacere(fact,form,fit,filter,focus,face,factor,fob,frames) c "Presolve" and "solve" the industrial/manufacturing optimization problem (IOP/MOP). rtnstat = IMPLpresolver(fact,form,fit,filter,focus,factorizer,fork,fresh,flashback,feedback) if (rtnstat == INNON) then write(*,*)"<<< %ERROR% - Invalid arguments." stop elseif (rtnstat > 0) then write(*,*)"<<< %ERROR% - Invalid input." stop elseif (rtnstat < 0) then write(*,*)"<<< %ERROR% - Not all variables/constraints converged - see *.tdt file." flag = 1 rtnstat = IMPLstatics(fact,CONTOL,flag) end if setting = "ECLOSURE2" write(*,*)"<<<" write(*,*)"<<< Solve closure = ",IMPLretrieveSTATISTIC(setting) write(*,*)"<<<" ftime = DCLOCK() dttime = ftime-stime ttime = ttime+dttime stime = ftime write(*,*)"<<<" write(*,*)"<<< Solve time = ",dttime write(*,*)"<<<" c Rerun/restart/repeat IMPL using different random-seeds by restoring the model-data and cycle-data from the c binary/unformatted *.bdt file (see the render() routine which writes this file). c c This is useful for non-convex nonlinear (quality) that exhibit several local optima. setting = "RANDSEED" rseed = INT(IMPLretrieveSETTING(setting)) do i = 1,frequency rtnstat = IMPLroot(fact) rtnstat = IMPLrefresh(ALL) rtnstat = IMPLrestore(fact,ALL) rtnstat = IMPLreceiveSETTING(setting,DBLE(rseed+i)) rtnstat = IMPLmodelerv(fact,form,fit,filter,focus,filler,foreign,force=PARAMETER) rtnstat = IMPLmodelerv(fact,form,fit,filter,focus,filler,foreign,force=VARIABLE) rtnstat = IMPLmodelerc(fact,form,fit,filter,focus,filler,foreign,force=CONSTRAINT) rtnstat = IMPLpresolver(fact,form,fit,filter,focus,factorizer,fork,fresh,flashback,feedback) end do c Save the solution-data ("original" problem) for the next run or execution if the warm-start is activated. if (fuse == WARMSTART$) then lun = INILUN INQUIRE(UNIT=lun,OPENED=rtnstat) do while (rtnstat) lun = lun + 1 INQUIRE(UNIT=lun,OPENED=rtnstat) end do open(UNIT=lun, & FILE=TRIM(fact)//"_vv.dta", & STATUS="UNKNOWN", & ACCESS="SEQUENTIAL", & ACTION="WRITE", & FORM="FORMATTED", & SHARED, & IOSTAT=rtnstat) if (rtnstat == 0) then allocate(rval(1:vvc)) call IMPLreview2(VARIABLE,vvc,1,0,rval(1:vvc)) do i = 1,vvc write(lun,*)rval(i) end do deallocate(rval) close(lun) end if end if c "Interface" the solution data i.e., export or write out the solution(s) in the *.exl file and using c *.oml file then "output" the selected solution variables results to the files specified. frames = CHAR(0) face = EXPORT$ rtnstat = IMPLinterfacere(fact,form,fit,filter,focus,face,factor,fob,frames) face = OUTPUT$ rtnstat = IMPLinterfacere(fact,form,fit,filter,focus,face,factor,fob,frames) ftime = DCLOCK() dttime = ftime-stime ttime = ttime+dttime stime = ftime write(*,*)"<<<"
  • 21. write(*,*)"<<< Export time = ",dttime write(*,*)"<<<" ftime = DCLOCK() dttime = ftime-stime ttime = ttime+dttime stime = ftime write(*,*)"<<<" write(*,*)"<<< Serialization time = ",dttime write(*,*)"<<<" c "Show" the various data for problem-solving, debugging and troubleshooting. if (BTEST(fanfare,SHOWREPORT$)) then rtnstat = IMPLreport(fact) logmessage = "<<< Write report successful." rtnstat = IMPLwritelog(logmessage) end if if (BTEST(fanfare,SHOWSUMMARY$)) then rtnstat = IMPLsummary(fact) logmessage = "<<< Write summary successful." rtnstat = IMPLwritelog(logmessage) end if if (BTEST(fanfare,SHOWSTATICS$)) then flag = 1 rtnstat = IMPLstatics(fact,CONTOL,flag) logmessage = "<<< Write statics successful." rtnstat = IMPLwritelog(logmessage) end if if (BTEST(fanfare,SHOWSLACKNESS$)) then if (filter == QUALITY$) then ptr_IMPLmodelerc = LOC(IMPLmodelerc) rtnstat = IMPLslackness(fact,ptr_IMPLmodelerc,0d+0) logmessage = "<<< Write slackness successful." rtnstat = IMPLwritelog(logmessage) end if end if if (BTEST(fanfare,SHOWSCALINGS$)) then if ((form == SPARSIC$) .and. (filter == QUALITY$)) then rtnstat = IMPLscalings(fact) logmessage = "<<< Write scalings successful." rtnstat = IMPLwritelog(logmessage) end if end if if (BTEST(fanfare,SHOWSERIESSET$)) then rtnstat = IMPLwriteall(fact,SERIESSET,0,0) logmessage = "<<< Writeall series-set successful." rtnstat = IMPLwritelog(logmessage) end if if (BTEST(fanfare,SHOWSIMPLESET$)) then rtnstat = IMPLwriteall(fact,SIMPLESET,0,0) logmessage = "<<< Writeall simple-set successful." rtnstat = IMPLwritelog(logmessage) end if if (BTEST(fanfare,SHOWSYMBOLSET$)) then rtnstat = IMPLwriteall(fact,SYMBOLSET,0,0) logmessage = "<<< Writeall symbol-set successful." rtnstat = IMPLwritelog(logmessage) end if if (BTEST(fanfare,SHOWCATALOG$)) then rtnstat = IMPLwriteall(fact,CATALOG,0,0) logmessage = "<<< Writeall catalog successful." rtnstat = IMPLwritelog(logmessage) end if if (BTEST(fanfare,SHOWLIST$)) then rtnstat = IMPLwriteall(fact,LIST,0,0) logmessage = "<<< Writeall list successful." rtnstat = IMPLwritelog(logmessage) end if if (BTEST(fanfare,SHOWPARAMETER$)) then rtnstat = IMPLwriteall(fact,PARAMETER,0,0) logmessage = "<<< Writeall parameter successful." rtnstat = IMPLwritelog(logmessage) end if if (BTEST(fanfare,SHOWVARIABLE$)) then rtnstat = IMPLwriteall(fact,VARIABLE,0,0) logmessage = "<<< Writeall variable successful." rtnstat = IMPLwritelog(logmessage) end if if (BTEST(fanfare,SHOWCONSTRAINT$)) then rtnstat = IMPLwriteall(fact,CONSTRAINT,0,0) logmessage = "<<< Writeall constraint successful." rtnstat = IMPLwritelog(logmessage) end if if (BTEST(fanfare,SHOWFORMULA$)) then rtnstat = IMPLwriteall(fact,FORMULA,0,0) logmessage = "<<< Writeall formula successful." rtnstat = IMPLwritelog(logmessage) end if c Show the model sensitivity with sparsity-pattern. if (BTEST(fanfare,SHOWDERIVATIVE$)) then ptr_IMPLmodelerc = LOC(IMPLmodelerc)
  • 22. flag = WRITESENSITIVITY rtnstat = IMPLwritesensitivity(fact,ptr_IMPLmodelerc,flag) logmessage = "<<< Write sensitivity successful." rtnstat = IMPLwritelog(logmessage) end if c Show model symbology with all variables and constraints as infix expressions. if (BTEST(fanfare,SHOWEXPRESSION$)) then if ((form == SYMBOLIC$) .or. & (filter == QUANTITY$) .or. (filter == LOGISTICS$)) then ptr_IMPLmodelerc = LOC(IMPLmodelerc) flag = WRITESYMBOLOGY rtnstat = IMPLwritesymbology(fact,ptr_IMPLmodelerc,flag) logmessage = "<<< Write symbology successful." rtnstat = IMPLwritelog(logmessage) end if end if c Show model sensability matrices i.e., A, B, C, Q, xm and z data files. if ((focus == ESTIMATION$) .and. (fork /= SVVE$) .and. (fork /= SSDE$)) then flag=0 rtnstat = IMPLwritesplitability(fact,ptr_IMPLmodelerc,flag) logmessage = "<<< Writeall splitability successful." rtnstat = IMPLwritelog(logmessage) end if c Deallocate global internal memory. rtnstat = IMPLrelease(ALL) if (rtnstat == 0) then logmessage = "<<< Release successful." rtnstat = IMPLwritelog(logmessage) else logmessage = "<<< Release unsuccessful." rtnstat = IMPLwritelog(logmessage) end if ftime = DCLOCK() dttime = ftime-stime ttime = ttime+dttime stime = ftime write(*,*)"<<<" write(*,*)"<<< Total time = ",ttime write(*,*)"<<<" c Finally, completely setup the problem again and show the symbolic representation of the problem if the form is "sparsic" c and the filter is "quality". if (BTEST(fanfare,SHOWEXPRESSION$)) then if ((form == SPARSIC$) .and. (filter == QUALITY$)) then rtnstat = IMPLroot(fact) rtnstat = IMPLreserve(fact,ALL) rtnstat = IMPLrestore(fact,ALL) form = SYMBOLIC$ rtnstat = IMPLmodelerv(fact,form,fit,filter,focus,filler,foreign,force=PARAMETER) rtnstat = IMPLmodelerv(fact,form,fit,filter,focus,filler,foreign,force=VARIABLE) rtnstat = IMPLmodelerc(fact,form,fit,filter,focus,filler,foreign,force=CONSTRAINT) fork = SOLVERLESS$ fresh = FIRSTSESSION$ rtnstat = IMPLpresolver(fact,form,fit,filter,focus,factorizer,fork,fresh,flashback,feedback) flag = WRITESYMBOLOGY rtnstat = IMPLwritesymbology(fact,ptr_IMPLmodelerc,flag) rtnstat = IMPLrelease(ALL) logmessage = "<<< Write symbology successful." rtnstat = IMPLwritelog(logmessage) end if end if end program IMPL