Archived
1
0

Add hard limits (-5 to +2) and never test after these times

This commit is contained in:
Jip J. Dekker 2021-12-08 10:18:20 +11:00
parent 574aa7dcc3
commit 06bf5cc446
No known key found for this signature in database
GPG Key ID: 517DF4A00618C9C3

View File

@ -30,15 +30,21 @@ array[Patient] of var bool: first_detected = [
| pt in Patient
];
% --- Constraint ---
enum Status = { First, ShiftBack, ShiftForward };
array[Patient] of var Status: status;
% --- Constraint ---
% The DLMO should be detected on the second occasion (if not detected on the first occasion)
constraint forall (pt in Patient) (
first_detected[pt]
if status[pt] = First then
first_detected[pt]
elseif status[pt] = ShiftBack then
% Before first occasion
\/ (critical_sample[pt] >= first_sample - (second_num_samples - 1) /\ critical_sample[pt] + 1 <= first_sample)
(critical_sample[pt] >= first_sample - (second_num_samples - 1) /\ critical_sample[pt] + 1 <= first_sample)
else
% After first occasion
\/ (critical_sample[pt] >= first_sample + (first_num_samples - 1) /\ critical_sample[pt] + 1 <= first_sample + (first_num_samples - 1) + (second_num_samples - 1))
(critical_sample[pt] >= first_sample + (first_num_samples - 1) /\ critical_sample[pt] + 1 <= first_sample + (first_num_samples - 1) + (second_num_samples - 1))
endif
);
% --- Objective ---
@ -46,7 +52,8 @@ solve minimize
% Number of tests on first occasion
(length(Patient) * first_num_samples)
% Number of test on second occasion
+ (count(pt in Patient) (not first_detected[pt]) * second_num_samples);
+ (count(pt in Patient) (status[pt] = ShiftBack) * min(second_num_samples, first_sample - min(Horizon) + 1))
+ (count(pt in Patient) (status[pt] = ShiftForward) * min(second_num_samples, max(Horizon) - (first_sample + (first_num_samples -1) + 1)));
% --- Output ---