目前,我有30个轮班和25名员工的花名册。这25名员工将轮班开始和结束时间与员工可用性相匹配。不过,Opta只分配了19个班次,并将所有其他班次留为空白,不分配剩余的6名员工。
在这里,我的假设是,它应该分配所有25名员工,因为他们的时间与轮班相匹配。我是在这里错过了什么,还是应该看看其他方面?
// ############################################################################
// Hard constraints
// ############################################################################
rule "Unavailable time slot for an employee"
when
EmployeeAvailability(
$e : employee,
$employeeName : employee.getName(),
$startDateTime : startDateTime,
$endDateTime : endDateTime)
Shift(
employee == $e,
!DateTimeUtils.doTimeslotsMatch($startDateTime,$endDateTime, startDateTime, endDateTime, $employeeName))
then
scoreHolder.addHardConstraintMatch(kcontext, -100);
end
rule "No overlapping shifts for an employee"
when
$s : Shift( employee != null,
$e : employee,
$employeeName : employee.getName(),
$firstStartDateTime: startDateTime,
$firstEndDateTime : endDateTime)
$s2: Shift( employee == $e,
this != $s,
DateTimeUtils.doTimeslotsMatch($firstStartDateTime,$firstEndDateTime, startDateTime, endDateTime, $employeeName))
then
scoreHolder.addHardConstraintMatch(kcontext, -100);
end
// ############################################################################
// Medium constraints
// ############################################################################
rule "Assign every possible shift"
when
Shift(employee == null)
then
scoreHolder.addMediumConstraintMatch(kcontext, -100);
end
// ############################################################################
// Soft constraints
// ############################################################################
rule "available time slot for an employee"
when
$rosterParametrization : RosterParametrization(desiredTimeSlotWeight != 0)
EmployeeAvailability(
$e : employee,
$employeeName : employee.getName(),
$startDateTime : startDateTime,
$endDateTime : endDateTime)
Shift(
employee == $e,
DateTimeUtils.doTimeslotsMatch($startDateTime,$endDateTime, startDateTime, endDateTime, $employeeName))
then
scoreHolder.addSoftConstraintMatch(kcontext, 100);
end
rule "Skill set preference"
when
Shift(employee != null, matchedPreferencedDisciplineCount > 0,$matchedPreferencedDisciplineCount : matchedPreferencedDisciplineCount)
then
scoreHolder.addSoftConstraintMatch(kcontext, + $matchedPreferencedDisciplineCount);
end
<?xml version="1.0" encoding="UTF-8"?>
<solver>
<!--<environmentMode>FAST_ASSERT</environmentMode>-->
<solutionClass>org.optaweb.employeerostering.domain.roster.Roster</solutionClass>
<entityClass>org.optaweb.employeerostering.domain.shift.Shift</entityClass>
<scoreDirectorFactory>
<scoreDrl>org/optaweb/employeerostering/service/solver/employeeRosteringScoreRules.drl</scoreDrl>
</scoreDirectorFactory>
<termination>
<secondsSpentLimit>240</secondsSpentLimit>
</termination>
<localSearch>
<unionMoveSelector>
<pillarChangeMoveSelector>
<subPillarType>SEQUENCE</subPillarType>
</pillarChangeMoveSelector>
<pillarSwapMoveSelector>
<subPillarType>SEQUENCE</subPillarType>
</pillarSwapMoveSelector>
</unionMoveSelector>
<acceptor>
<entityTabuSize>7</entityTabuSize>
</acceptor>
<forager>
<acceptedCountLimit>800</acceptedCountLimit>
</forager>
</localSearch>
</solver>
public class Shift extends AbstractPersistable implements Comparable<Shift> {
private static final Comparator<Shift> PILLAR_SEQUENCE_COMPARATOR = Comparator
.comparing((Shift a) -> a.getStartDateTime())
.thenComparing(a -> a.getEndDateTime());
使用基于Pilar的移动选择器来更有效地逃避局部最优。
我已经安装了openshift版本的员工花名册演示。我正在使用UI中的呼叫中心示例。在“点花名册”选项卡中,当我将某些点标记为未分配并单击“求解”按钮时,我看到Optaplanner开始优化,并看到软约束和硬约束的分数。即使在完成优化后,标记为未分配的内容仍然保持为未分配。我可以看到硬约束分数:0。为什么这些位置没有分配给可用的员工?
下载钉钉 钉钉,阿里巴巴出品,专为中小企业和团队免费打造的沟通协同多端平台。支持iOS、Android、Windows、Mac四大平台,完美适配iPad,电脑和手机消息可实时同步,并在云端保存,方便随时查找。现在,开始下载钉钉最新版,体验一种全新的工作模式。 激活并加入企业 1、打开钉钉,点击右上角新用户注册; 2、输入手机号码,点击下一步; 3、输入短信验证码或语音获取; 4、设置登录密码,用于
营销通为企业每一个员工提供了免费的小程序名片,每一个企业成员都可成为营销渠道、社交裂变点,进行推广获客。 1.员工名片 名片频道主要展示员工的个人信息与介绍,访客可以了解员工的信息,与员工进行互动交流。 2.公司产品 产品频道可以展示公司的产品信息,访客在这里查看产品资料,一键咨询或提交免费试用。 3.公司动态 动态频道可以展示公司最新动态、活动等信息,访客可以在此了解企业的最新资讯动态。 4.公
我正在研究一个用例,它是护士排班示例和VRP问题的组合。单独来看,我理解并可以在一定程度上调整两者,但我不太确定如何合并它们。 为了进一步说明我的用例,我正在尝试安排护士(考虑技能、合同和偏好)前往位于20-40英里半径内的患者之家。 例如,具有“胰岛素”技能的护士需要前往患者处,在特定时间窗口内到达,执行一项任务15分钟,然后前往另一个患者处,执行相同的任务,并继续工作,直到8小时轮班结束。需要
公共静态员工getEmployeeDetails()--它获取员工的详细信息-id、姓名和工资,并返回Employee对象。 public static int getpfpercentry()-它获取PF百分比并返回相同的 在main方法中调用上述两个方法,然后调用Employee类中的calculateNetSalary方法并打印输出,如下所示。 输入ID:101输入姓名:Vivek输入工资:
我正在尝试注册服务工作者,但出现错误: 该页面使用github Pages托管:https://boopathi.in/sw-demo-iss。源代码在这里https://github.com/boopathi/sw-demo-iss 我试图理解这意味着什么,以及如何解决错误。
问题内容: 我想显示带有的以及,并且计数应大于5,并且我想让一月份没有被雇用的员工。 我尝试了以下查询 但是在这里我没有数。我也想数。 问题答案: 该查询返回department_id,并且由于我按department_id分组,因此将返回属于每个部门的员工数 输出看起来像这样
如何使用约束流api计算员工的公平性。 https://www.optaplanner.org/blog/2017/02/03/FormulaForMeasuringUnfairness.html 我在网球求解器示例中看到了上述流口水的实现。 https://github.com/kiegroup/optaplanner/blob/581d10fb8140f37b7491d06b2bab8d5ac