OptaPlanner-“导入”和“未解决”文件夹中的xml文件有什么区别?护士名册示例

时间:2018-10-08 00:58:04

标签: drools optaplanner

在护士排班示例的optaplanner数据文件中,我看到两个文件夹“ import”和“ unsolved”中的xml数据文件具有相似的名称,但“ unsolved”文件夹中的文件具有许多xml的参考标记标签。例如,“导入”文件夹中的long01.xml如下所示:

<ShiftTypes>
    <Shift ID="E">
      <StartTime>06:30:00</StartTime>
      <EndTime>14:30:00</EndTime>
      <Description>Early shift type</Description>
      <Skills>
        <Skill>Nurse</Skill>
      </Skills>
    </Shift>
    <Shift ID="L">
      <StartTime>14:30:00</StartTime>
      <EndTime>22:30:00</EndTime>
      <Description>Late shift type</Description>
      <Skills>
        <Skill>Nurse</Skill>
      </Skills>
    </Shift>
    <Shift ID="D">
      <StartTime>08:30:00</StartTime>
      <EndTime>16:30:00</EndTime>
      <Description>Day shift type</Description>
      <Skills>
        <Skill>Nurse</Skill>
      </Skills>
    </Shift>
    <Shift ID="N">
      <StartTime>22:30:00</StartTime>
      <EndTime>06:30:00</EndTime>
      <Description>Night shift</Description>
      <Skills>
        <Skill>Nurse</Skill>
      </Skills>
    </Shift>
    <Shift ID="DH">
      <StartTime>08:30:00</StartTime>
      <EndTime>16:30:00</EndTime>
      <Description>Head nurse day shift type</Description>
      <Skills>
        <Skill>HeadNurse</Skill>
      </Skills>
    </Shift>
  </ShiftTypes>

但这是“ unsolved”文件夹中具有相同名称的xml文件的样子:

  <firstShiftDate id="3">
  <id>0</id>
  <dayIndex>0</dayIndex>
  <date>2010-01-01</date>
  <shiftList id="4">
    <Shift id="5">
      <id>0</id>
      <shiftDate reference="3"/>
      <shiftType id="6">
        <id>0</id>
        <code>E</code>
        <index>0</index>
        <startTimeString>06:30:00</startTimeString>
        <endTimeString>14:30:00</endTimeString>
        <night>false</night>
        <description>Early shift type</description>
        <shiftLength>2</shiftLength>
      </shiftType>
      <index>0</index>
      <requiredEmployeeSize>8</requiredEmployeeSize>
    </Shift>
    <Shift id="7">
      <id>1</id>
      <shiftDate reference="3"/>
      <shiftType id="8">
        <id>1</id>
        <code>L</code>
        <index>1</index>
        <startTimeString>14:30:00</startTimeString>
        <endTimeString>22:30:00</endTimeString>
        <night>false</night>
        <description>Late shift type</description>
        <shiftLength>2</shiftLength>
      </shiftType>
      <index>1</index>
      <requiredEmployeeSize>8</requiredEmployeeSize>
    </Shift>
    <Shift id="9">
      <id>2</id>
      <shiftDate reference="3"/>
      <shiftType id="10">
        <id>2</id>
        <code>D</code>
        <index>2</index>
        <startTimeString>08:30:00</startTimeString>
        <endTimeString>16:30:00</endTimeString>
        <night>false</night>
        <description>Day shift type</description>
        <shiftLength>2</shiftLength>
      </shiftType>
      <index>2</index>
      <requiredEmployeeSize>5</requiredEmployeeSize>
    </Shift>
    <Shift id="11">
      <id>3</id>
      <shiftDate reference="3"/>
      <shiftType id="12">
        <id>3</id>
        <code>N</code>
        <index>3</index>
        <startTimeString>22:30:00</startTimeString>
        <endTimeString>06:30:00</endTimeString>
        <night>true</night>
        <description>Night shift</description>
        <shiftLength>2</shiftLength>
      </shiftType>
      <index>3</index>
      <requiredEmployeeSize>6</requiredEmployeeSize>
    </Shift>
    <Shift id="13">
      <id>4</id>
      <shiftDate reference="3"/>
      <shiftType id="14">
        <id>4</id>
        <code>DH</code>
        <index>4</index>
        <startTimeString>08:30:00</startTimeString>
        <endTimeString>16:30:00</endTimeString>
        <night>false</night>
        <description>Head nurse day shift type</description>
        <shiftLength>2</shiftLength>
      </shiftType>
      <index>4</index>
      <requiredEmployeeSize>2</requiredEmployeeSize>
    </Shift>
  </shiftList>
</firstShiftDate>
<lastShiftDate id="15">
          <id>27</id>
          <dayIndex>27</dayIndex>
          <date>2010-01-28</date>
          <shiftList id="16">
            <Shift id="17">
              <id>135</id>
              <shiftDate reference="15"/>
              <shiftType reference="6"/>
              <index>135</index>
              <requiredEmployeeSize>8</requiredEmployeeSize>
            </Shift>
            <Shift id="18">
              <id>136</id>
              <shiftDate reference="15"/>
              <shiftType reference="8"/>
              <index>136</index>
              <requiredEmployeeSize>8</requiredEmployeeSize>
            </Shift>
            <Shift id="19">
              <id>137</id>
              <shiftDate reference="15"/>
              <shiftType reference="10"/>
              <index>137</index>
              <requiredEmployeeSize>5</requiredEmployeeSize>
            </Shift>
            <Shift id="20">
              <id>138</id>
              <shiftDate reference="15"/>
              <shiftType reference="12"/>
              <index>138</index>
              <requiredEmployeeSize>6</requiredEmployeeSize>
            </Shift>
            <Shift id="21">
              <id>139</id>
              <shiftDate reference="15"/>
              <shiftType reference="14"/>
              <index>139</index>
              <requiredEmployeeSize>2</requiredEmployeeSize>
            </Shift>
          </shiftList>
        </lastShiftDate>
        <planningWindowStart reference="3"/>

运行optaplanner示例时,它似乎允许您从“未解决”文件夹中的文件列表中进行选择。 “导入”文件夹中的xml数据文件是“原始” xml文件吗?

如果我单击“导入”按钮并选择一个xml文件,那么我认为它会打开文件并为其创建“未解决”版本?这是否发生在NurseRosterExporter.java中?如果是这样,为什么我们需要这样做?添加“参考”标签并创建所有新参考标签的确切代码在哪里?

为什么创建XML文件似乎有两个步骤-您拥有原始xml文件,然后需要将其导入,保存,然后将其加载到示例中-有没有更有效的方法这个吗?

1 个答案:

答案 0 :(得分:0)

未解决的文件夹正在使用Java域对象的XStream XML格式。

导入文件夹使用国际护士名册竞赛定义的XML格式。

无论您从哪个文件夹中读取文件,它都会在Java中创建域对象,而这正是OptaPlanner的工作方式。 XML读/写只是为了方便示例。其他人使用JSON,Excel文件,... Optaweb-employee-rostering使用带有漂亮Web ui的数据库。