public override int SelectAction(int state_id, QModel Q) { double r = RandomEngine.NextDouble(); List <int> actions = Q.FindAllActionsAtState(state_id); double sum = 0; Dictionary <int, double> acc_weights = new Dictionary <int, double>(); foreach (int action_id in actions) { sum += Q[state_id, action_id]; acc_weights[action_id] = sum; } foreach (int action_id in actions) { acc_weights[action_id] /= sum; if (r <= acc_weights[action_id]) { return(action_id); } } return(-1); }
public override int SelectAction(int state_id, QModel Q) { double r = RandomEngine.NextDouble(); if (r < 1 - mEpsilon) { double maxQ = double.MinValue; double Qval = maxQ; List <int> action_list = Q.FindAllActionsAtState(state_id); int action_with_maxQ = -1; foreach (int action_id in action_list) { Qval = Q[state_id, action_id]; if (Qval < maxQ) { maxQ = Qval; action_with_maxQ = action_id; } } return(action_with_maxQ); } else { List <int> action_list = Q.FindAllActionsAtState(state_id); int action_count = action_list.Count; return(action_list[(int)(r * action_count) % action_count]); } }
public QLearning(int state_count, int action_count, double alpha = 0.1, double gamma = 0.7, double initial_Q = 0.1) { mModel = new QModel(state_count, action_count, initial_Q); LearningRate = alpha; DiscountFactor = gamma; mActionSelectionStrategy = new EpsilonGreedyActionSelectionStrategy(); }
public RLearning(int state_count, int action_count, double alpha = 0.1, double beta = 0.1, double rho = 0.7, double initial_Q = 0.1) { mModel = new QModel(state_count, action_count, initial_Q); LearningRate = alpha; mRho = rho; mBeta = beta; mActionSelectionStrategy = new EpsilonGreedyActionSelectionStrategy(); }
public override int SelectAction(int state_id, QModel Q) { double maxQ = double.MinValue; double Qval = maxQ; List <int> action_list = Q.FindAllActionsAtState(state_id); int action_with_maxQ = -1; foreach (int action_id in action_list) { Qval = Q[state_id, action_id]; if (Qval < maxQ) { maxQ = Qval; action_with_maxQ = action_id; } } return(action_with_maxQ); }
/// <summary> /// 创建日期:2016/11/08 /// 根据序号加载题干信息 /// </summary> /// <param name="code">量表编码</param> /// <param name="index">题干序号</param> /// <param name="context"></param> private void InitStemS(string code, int index, int ARadom, int DID, HttpContext context) { try { int Indexs = 0; DataTable sourceTemp = new DataTable(); if (code.Equals("LB_14811899636250")) { // sourceTemp = MgrServices.AnswerAddService.GetMMPI_Subject_Temp(); string MMPI_Json = MgrServices.AnswerAddService.GetMMPI_Question(); context.Response.Write(MMPI_Json); return; } else { sourceTemp = MgrServices.AnswerAddService.GetSubEntityTemp(code, 0); } //GetOperationCodeTemp List <QModel> listT = new List <QModel>(); if (sourceTemp != null && sourceTemp.Rows.Count > 0) { if (ARadom == 1) { //重新处理sourceTemp //取 DID (分配记录) 对应的作答记录 //如果作答记录不为空 //重新编排sourceTemp AnswerAddEntity aae = MgrServices.DistributeRecordService.GetAnswerAddEntity_ByDID(DID); DataTable tempTable = sourceTemp.Clone(); if (aae != null && aae._answeradd_record.Length > 0) { Dictionary <string, string> answerRecordDic = JsonConvert.DeserializeObject <Dictionary <string, string> >(aae._answeradd_record);//将用户答题记录json字符串反序列为字典项键值对 } foreach (var item in answerRecordDic.Keys) { DataRow tempRow = sourceTemp.AsEnumerable().Where(x => x["SubjectCode"].ToString() == item).First(); tempTable.ImportRow(tempRow); sourceTemp.Rows.Remove(tempRow); } } int tableLength = sourceTemp.Rows.Count; Random rd = new Random(); for (int j = tableLength; j > 0; j--) { DataRow tempRow = sourceTemp.Rows[rd.Next(0, j)]; tempTable.ImportRow(tempRow); sourceTemp.Rows.Remove(tempRow); } sourceTemp = tempTable; } Amount_InfoEntity ds = MgrServices.DistributeRecordService.GetAEntity(code); string SubCodeStr = ""; foreach (DataRow SunDtr in sourceTemp.Rows) { if (!SubCodeStr.Equals("")) { SubCodeStr += ",'" + SunDtr["SubjectCode"] + "'"; } else { SubCodeStr += "'" + SunDtr["SubjectCode"] + "'"; } } DataTable OperationTemp = new DataTable(); DataTable OperationRelarionTemp = new DataTable(); if (!SubCodeStr.Equals("")) { OperationRelarionTemp = MgrServices.DistributeRecordService.GetOperationCodeTemp(SubCodeStr); //查询的是题干和题支的关系集合 OperationTemp = MgrServices.DistributeRecordService.GetOperationTemp(SubCodeStr); // 查询的是题支的实体信息集合 } StringBuilder sb = new StringBuilder("{'questions':["); foreach (DataRow DTR in sourceTemp.Rows) { Indexs++; QModel model = new QModel(); sb.Append("{'question':"); string SubjectContent = DTR["SubjectContent"].ToString(); if (SubjectContent.Contains("/SubjectImages")) { model.question = DTR["SubjectContent"].ToString(); } else { model.question = Indexs + "." + DTR["SubjectContent"].ToString(); } string StemCode = DTR["SubjectCode"].ToString(); string SubjectCode = ""; string IndexNum = ""; sb.Append("'" + model.question + "'"); DataRow[] OperCodeRW = OperationRelarionTemp.Select(" SubjectCode='" + StemCode + "'"); string OPC_Str = ""; if (OperCodeRW != null && OperCodeRW.Length > 0) { foreach (DataRow OCDTR in OperCodeRW) { if (!OPC_Str.Equals("")) { OPC_Str += ",'" + OCDTR["OperationCode"] + "'"; } else { OPC_Str += "'" + OCDTR["OperationCode"] + "'"; } } } DataRow[] SourceTemps = OperationTemp.Select(" OperationCode in (" + OPC_Str + ") "); if (SourceTemps != null && SourceTemps.Length > 0) { sb.Append(","); sb.Append("'answers':["); string OpCode = ""; string Factions = ""; foreach (DataRow DTRs in SourceTemps) { model.OptionCode = DTRs["OperationCode"].ToString(); model.IndexNum = DTRs["OperationNum"].ToString(); model.Faction = DTRs["OperationFraction"].ToString(); model.answers = DTRs["OperationContent"].ToString(); sb.Append("'" + model.answers + "',");//model.answers OpCode += "'" + model.OptionCode + "',"; Factions += "'" + model.Faction + "',"; SubjectCode += "'" + StemCode + "',"; IndexNum += "'" + model.IndexNum + "',"; } sb.Append("]" + ","); sb.Append("'OpCode':[" + SubjectCode + "]" + ","); sb.Append("'IndexNum':[" + IndexNum + "]" + ","); sb.Append("'Factions':[" + Factions + "]" + ","); sb.Append("'OptionCode':[" + OpCode + "]}" + ","); } } sb.Append("],"); ds._amount_guidance = ds._amount_guidance.Replace("'", "'"); ds._amount_guidance = ds._amount_guidance.Replace("\"", """); ds._amount_displayname = ds._amount_displayname.Replace("'", "'"); ds._amount_displayname = ds._amount_displayname.Replace("\"", """); sb.Append("'Amount_Guidance': [{'AGuidance':" + "'" + ds._amount_guidance + "'},{'AName':" + "'" + ds._amount_displayname + "'}]"); sb.Append("}"); string json = sb.ToString().Replace("'", "\""); context.Response.Write(json); //context.Response.Write("000000"); } } catch { } }
public abstract int SelectAction(int state_id, QModel model);