private double GetI_of_k(DataTable dt, int i, int k)
{
// Dynamic programming
string key = i + "_" + k;
if (dict_i.ContainsKey(key))
return dict_i[key];
// CAUTION!!!
// i = priority = the task number
double e_i = GetExecutionTimeByTaskNumber(dt, i);
List<DataRow> listDr = GetAllHigherPriorityTasks(dt, i);
double sum = 0;
foreach (DataRow dr in listDr)
{
// Current task infos
int taskNumber = int.Parse(dr["Priority"].ToString());
double taskPeriod = double.Parse(dr["Period"].ToString());
double taskExecution = double.Parse(dr["ExecutionTime"].ToString());
sum += Math.Ceiling(GetR_of_k(dt, i, k - 1) / taskPeriod) * taskExecution;
}
double value = e_i + sum;
dict_i.Add(key, value);
return value;
}
private double GetDBF_RM(DataTable dt, double t, int i, double csOverhead)