Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/07/17 13:49:09 (7 years ago)
Author:
abeham
Message:

#2747: worked on the CFSAP

  • Introduced new benchmark instances mentioned in the literature and updated the parser
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/BozejkoCFSAPParser.cs

    r14757 r15456  
    2020#endregion
    2121
     22using System;
     23using System.Collections.Generic;
    2224using System.IO;
     25using System.Linq;
    2326using System.Text;
    2427
     
    2629  public class BozejkoCFSAPParser {
    2730    public int Jobs { get; private set; }
    28     public int[,] ProcessingTimes { get; private set; }
    29     public int[,,] SetupTimes { get; private set; }
     31    public int[] Machines { get; private set; }
     32    public int Nests { get; private set; }
     33    public List<int[][]> ProcessingTimes { get; private set; }
     34    public List<int[][][]> SetupTimes { get; private set; }
    3035
    3136    public void Parse(Stream stream) {
    3237      using (var reader = new StreamReader(stream)) {
    33         Jobs = GetNextNumber(reader);
    34         var seed = GetNextNumber(reader);
    35         ProcessingTimes = new int[2, Jobs];
    36         SetupTimes = new int[2, Jobs, Jobs];
     38        Nests = GetNextInteger(reader);
     39        Jobs = GetNextInteger(reader);
     40        Machines = Enumerable.Range(0, Nests).Select(x => GetNextInteger(reader)).ToArray();
     41        ProcessingTimes = new List<int[][]>(Nests);
     42        SetupTimes = new List<int[][][]>(Nests);
    3743
    38         for (var m = 0; m < 2; m++) {
    39           for (var j = 0; j < Jobs; j++) {
    40             ProcessingTimes[m, j] = GetNextNumber(reader);
     44        for (var n = 0; n < Nests; n++) {
     45          var machines = Machines[n];
     46          var pr = new int[machines][];
     47          for (var m = 0; m < machines; m++) {
     48            pr[m] = new int[Jobs];
     49            for (var j = 0; j < Jobs; j++) {
     50              pr[m][j] = GetNextInteger(reader);
     51            }
    4152          }
     53          ProcessingTimes.Add(pr);
    4254        }
    43         for (var m = 0; m < 2; m++) {
    44           for (var j = 0; j < Jobs; j++) {
    45             for (var i = 0; i < Jobs; i++) {
    46               SetupTimes[m, j, i] = GetNextNumber(reader);
     55        for (var n = 0; n < Nests; n++) {
     56          var machines = Machines[n];
     57          var sp = new int[machines][][];
     58          for (var m = 0; m < machines; m++) {
     59            sp[m] = new int[Jobs][];
     60            for (var j = 0; j < Jobs; j++) {
     61              sp[m][j] = new int[Jobs];
     62              for (var i = 0; i < Jobs; i++) {
     63                sp[m][j][i] = GetNextInteger(reader);
     64              }
    4765            }
     66            SetupTimes.Add(sp);
    4867          }
    4968        }
     
    5372    }
    5473
    55     private int GetNextNumber(StreamReader reader) {
     74    private int GetNextInteger(StreamReader reader) {
    5675      var builder = new StringBuilder();
    5776      int r = reader.Read();
     
    6079        if ((c == ' ' || c == '\t' || c == '\r' || c == '\n') && builder.Length > 0)
    6180          return int.Parse(builder.ToString());
     81        if (c == 'N' || c == 'M') {
     82          // consume the whole line
     83          reader.ReadLine();
     84          r = reader.Read();
     85          continue;
     86        }
    6287        if (char.IsNumber(c)) builder.Append(c);
    6388        r = reader.Read();
     89        if (r == -1 && builder.Length > 0) return int.Parse(builder.ToString());
    6490      }
    65       return -1;
     91      throw new InvalidOperationException("Stream does not contain more numbers");
    6692    }
    6793  }
Note: See TracChangeset for help on using the changeset viewer.