⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rrproj_prob.h

📁 aiParts is a set of C++ classes that can be used to develop artificial intelligence for multi-decisi
💻 H
📖 第 1 页 / 共 3 页
字号:
  aipTime   m_start_day;   // derived
  aipTime   m_end_day;     // derived

protected:

  void derive_data();

public:

  rppEmpOff () {}
  rppEmpOff (long a_emp_id, long a_start_yyyymmdd, long a_end_yyyymmdd);
  virtual ~rppEmpOff ();

  virtual long num_keys (void) const { return 3;                }
  virtual long     key1 (void) const { return m_emp_id;         }
  virtual long     key2 (void) const { return m_start_yyyymmdd; }
  virtual long     key3 (void) const { return m_end_yyyymmdd;   }

                                          // returns 0 on failure
  virtual int read_str  (const char *x);
  virtual int write_str       (char *x) const;

  long emp_id         () const { return m_emp_id;         }
  long start_yyyymmdd () const { return m_start_yyyymmdd; }

  long end_yyyymmdd   () const { return m_end_yyyymmdd;   }

  aipTime start_day   () const { return m_start_day;      }
  aipTime end_day     () const { return m_end_day;        }

};

//======================================================================
//  rppPosEmp  -  Position and an Employee that can work it

class rppPosEmp : public aipDemon {

  long      m_pos_id;
  long      m_emp_id;

public:

  rppPosEmp () {}
  rppPosEmp (long a_pos_id, long a_emp_id);
  virtual ~rppPosEmp ();

  virtual long num_keys (void) const { return 2;         }
  virtual long     key1 (void) const { return m_pos_id;  }
  virtual long     key2 (void) const { return m_emp_id;  }

                                          // returns 0 on failure
  virtual int read_str  (const char *x);
  virtual int write_str       (char *x) const;

  long pos_id  () const { return m_pos_id; }
  long emp_id  () const { return m_emp_id; }

};

//======================================================================
//  rppAssignment  -  Assignment of an emp to a pos for some day(s)

class rppAssignment : public aipDemon {

  long      m_proj_id;
  long      m_pos_id;
  long      m_emp_id;
  long      m_start_yyyymmdd;
  long      m_end_yyyymmdd;

public:

  rppAssignment () {}
  rppAssignment (long a_proj_id, long a_pos_id, long a_emp_id, 
                 long a_start_yyyymmdd, long a_end_yyyymmdd);
  virtual ~rppAssignment ();

  virtual long num_keys (void) const { return 3;               }
  virtual long     key1 (void) const { return m_emp_id;        }
  virtual long     key2 (void) const { return m_pos_id;        }
  virtual long     key3 (void) const { return m_start_yyyymmdd;}

                                          // returns 0 on failure
  virtual int read_str  (const char *x);
  virtual int write_str       (char *x) const;

  long proj_id        () const { return m_proj_id;        }
  long pos_id         () const { return m_pos_id;         }
  long emp_id         () const { return m_emp_id;         }
  long start_yyyymmdd () const { return m_start_yyyymmdd; }
  long end_yyyymmdd   () const { return m_end_yyyymmdd;   }

};

//======================================================================
//  rppEmpDayPos  -  historic results of solving the problem

class rppEmpDayPos : public aipDemon {

  long      m_emp_id;
  long      m_yyyymmdd;
  long      m_proj_id;
  long      m_pos_id;

public:

  rppEmpDayPos () {}
  rppEmpDayPos (long a_emp_id, long a_yyyymmdd,
                long a_proj_id, long a_pos_id);
  virtual ~rppEmpDayPos ();

  virtual long num_keys (void) const { return 4;          }
  virtual long     key1 (void) const { return m_emp_id;   }
  virtual long     key2 (void) const { return m_yyyymmdd; }
  virtual long     key3 (void) const { return m_proj_id;  }
  virtual long     key4 (void) const { return m_pos_id;   }

                                          // returns 0 on failure
  virtual int read_str  (const char *x);
  virtual int write_str       (char *x) const;

  long emp_id   () const { return m_emp_id;   }
  long yyyymmdd () const { return m_yyyymmdd; }
  long proj_id  () const { return m_proj_id;  }
  long pos_id   () const { return m_pos_id;   }

};

//======================================================================
//  rppPosDayEmp  -  normalized solution data

class rppPosDayEmp : public aipDemon {

  long      m_proj_id;
  long      m_pos_id;
  long      m_yyyymmdd;
  long      m_emp_id;

public:

  rppPosDayEmp (long a_proj_id, long a_pos_id,
                long a_yyyymmdd, long a_emp_id);
  virtual ~rppPosDayEmp ();

  virtual long num_keys (void) const { return 3;          }
  virtual long     key1 (void) const { return m_proj_id;  }
  virtual long     key2 (void) const { return m_pos_id;   }
  virtual long     key3 (void) const { return m_yyyymmdd; }

  virtual int write_hdr (char *x) const;    // returns 0 on failure
  virtual int write_str (char *x) const;    // returns 0 on failure

  long proj_id  () const { return m_proj_id;  }
  long pos_id   () const { return m_pos_id;   }
  long yyyymmdd () const { return m_yyyymmdd; }
  long emp_id   () const { return m_emp_id;   }

};

//======================================================================
//  rppProjWeekEmpDay  -  re-ordered normalized output with week-number

class rppProjWeekEmpDay : public aipDemon {

  long      m_proj_id;
  long      m_week_num;
  long      m_emp_id;
  long      m_week_pos;       // 1 to 7
  long      m_yyyymmdd;
  long      m_pos_id;

public:

  rppProjWeekEmpDay ();
  virtual ~rppProjWeekEmpDay ();

  virtual long num_keys (void) const { return 4;          }
  virtual long     key1 (void) const { return m_proj_id;  }
  virtual long     key2 (void) const { return m_week_num; }
  virtual long     key3 (void) const { return m_emp_id;   }
  virtual long     key4 (void) const { return m_week_pos; }

  void set (long a_proj_id, long a_week_num, long a_emp_id,
            long a_week_pos, long a_yyyymmdd, long a_pos_id);

  long proj_id  () const { return m_proj_id;  }
  long week_num () const { return m_week_num; }
  long emp_id   () const { return m_emp_id;   }
  long week_pos () const { return m_week_pos; }
  long yyyymmdd () const { return m_yyyymmdd; }
  long pos_id   () const { return m_pos_id;   }

};

//======================================================================
//  rppProjWeek  -  master for one week of the problem solution  

class rppProjWeek : public aipDemon {

  long      m_proj_id;
  long      m_week_num;
  long      m_yyyymmdd[7];    // -1 = null = past end of problem

public:

  rppProjWeek () { reset(); }
  virtual ~rppProjWeek () {}

  //   currently not storing these objects in a pandemonium
  virtual long num_keys (void) const { return 2;          }
  virtual long     key1 (void) const { return m_proj_id;  }
  virtual long     key2 (void) const { return m_week_num; }

  void set_pw (long p, long w) { m_proj_id = p;   m_week_num = w; }

  void set_day (long iday, long a_yyyymmdd) {
    m_yyyymmdd[iday-1] = a_yyyymmdd;
  }

  void reset ();

  virtual int write_hdr (char *x)   const;   // returns 0 on failure
  virtual int write_hdr (FILE *opf) const;   // returns 0 on failure
  virtual int write_str (char *x)   const;   // returns 0 on failure
  virtual int write     (FILE *ofp) const;   // returns 0 on failure

  long proj_id  () const { return m_proj_id;  }
  long week_num () const { return m_week_num; }

  long yyyymmdd (long iday) const { 
    if (iday < 1 || iday > 7) return -1;
    return m_yyyymmdd[iday-1]; 
  }

};

//======================================================================
//  rppProjWeekEmp  -  details for one week of the problem solution

class rppProjWeekEmp : public aipDemon {

  long      m_proj_id;
  long      m_week_num;
  long      m_emp_id;
  long      m_pos_id[7];    // -1 = null = not working that day

public:

  rppProjWeekEmp () { reset(); }
  virtual ~rppProjWeekEmp () {}

  //   currently not storing these objects in a pandemonium
  // virtual long num_keys (void) const { return 3;          }
  // virtual long     key1 (void) const { return m_proj_id;  }
  // virtual long     key2 (void) const { return m_week_num; }
  // virtual long     key3 (void) const { return m_emp_id;   }

  void set_pwe (long p, long w, long e) { 
    m_proj_id = p;   m_week_num = w;   m_emp_id = e;
  }

  void set_day (long iday, long a_pos_id) {
    m_pos_id[iday-1] = a_pos_id ;
  }

  void reset ();

  virtual int write_hdr (char *x)   const;   // returns 0 on failure
  virtual int write_hdr (FILE *ofp) const;   // returns 0 on failure
  virtual int write_str (char *x)   const;   // returns 0 on failure
  virtual int write     (FILE *ofp) const;   // returns 0 on failure

  long proj_id   () const { return m_proj_id;  }
  long week_num  () const { return m_week_num; }
  long emp_id    () const { return m_emp_id;   }

  long pos_id (long iday) const { 
    if (iday < 1 || iday > 7) return -1;
    return m_pos_id[iday-1]; 
  }

};

//======================================================================
//  rppProbWrite  -  Solution-Writer for a problem
//
//  Calling write():
//    - opens the output file
//    - calls pre_proc()
//    - iterates through the problem Pos-Day-Emps, and for each:
//      - calls handle_pos_day_emp()
//    - calls post_proc()
//    - closes the output file
//
//  This class may be used for its default behavior - writing the
//  solution data in the normalized form - or as a base class.

class rppProbWrite : public aipBase {

  const rppProblem  * m_prob;

  char                m_out_file_name[Max_File_Name+1];

  int                 m_any_pos_day_emp_written;

protected:

  const rppProblem  * prob () const { return m_prob; }

  virtual int pre_proc           (FILE *ofp);
  virtual int handle_pos_day_emp (FILE *ofp, 
                                  const rppPosDayEmp *pde);
  virtual int post_proc          (FILE *ofp);

  int write_blank_line (FILE *ofp);

public:

  rppProbWrite (const rppProblem *x, const char *out_file_name);
  virtual ~rppProbWrite ();

  int write ();        // return zero on error

};

//======================================================================
//  rppProbWriteWeek1  - Week-based Solution-Writer number 1
//
//  m_proj_week_emp_days is the re-ordered normalized-solution-data
//  with a week-number.

class rppProbWriteWeek1 : public rppProbWrite {

  aipTime           m_week1_start_dt;      // 1st, determine this

  aipPandemonium  * m_proj_week_emp_days;  // 2nd, reorder the data

  rppProjWeek     * m_proj_week;
  int               m_any_week_data;       // 0=no

  rppProjWeekEmp  * m_proj_week_emp;
  int               m_any_emp_data;        // 0=no

protected:

  int is_valid () const;

  void reset ();

  void set_week1_start_dt ();

  virtual int week_dt (aipTime x, 
                       long *week_num, long *week_pos) const;

  virtual int handle_pos_day_emp (FILE *ofp, 
                                  const rppPosDayEmp *pde);

  virtual int post_proc (FILE *ofp);
  virtual int set_proj_week (rppProjWeekEmpDay *x);
  virtual int add_to_proj_week_emp (rppProjWeekEmpDay *x);

  rppProjWeekEmpDayItr  projweekempday_iterator () const;

public:

  rppProbWriteWeek1 (const rppProblem *x, const char *out_file_name);
  virtual ~rppProbWriteWeek1 ();

  // int write()    from parent

};

//======================================================================
//  rppPosDayItr  -  Iterator for Position-Days in a Problem

class rppPosDayItr : public aipDemonItr {

public:

  rppPosDayItr (aipPandemonium *p) {
    set_demon_itr(p,0);
  }

  rppPosDayItr (const rppPosDayItr& x) {
    set_demon_itr (x.pandemonium(), x.current());
  }

  virtual ~rppPosDayItr () {}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -