Пример #1
0
        public void BoltzmannChooseAction()
        {
            double[] actionProbabilities = new double[config.ActionCount - 1];
            double   sumProb             = 0;

            for (int i = 0; i < actionSet.ActionSetSize - 1; i++)
            {
                actionProbabilities[i] = Math.Exp(actionSet[i].SendQvalue(state) / Tfunction(step));
                sumProb += actionProbabilities[i];
            }
            Parallel.For(0, actionProbabilities.Length, i =>
            {
                actionProbabilities[i] /= sumProb;
            });
            double randnum = RandomMan.getRand(1.0);

            for (int i = 0; i < actionProbabilities.Length; i++)
            {
                if (randnum < actionProbabilities[i])
                {
                    actionNum = i;
                    return;
                }
                else
                {
                    randnum -= actionProbabilities[i];
                }
            }
        }
Пример #2
0
 public void CheckISFlag(int agentNumother, int iSother, int[] stepTableOther)
 {
     if (iS == iSother)
     {
         //iSCount++;
         if (stepTable[iS] < stepTableOther[iS])
         {
             //iSflag = 1;
         }
         else if (stepTable[iS] == stepTableOther[iS])
         {
             if (agentnum < agentNumother)
             {
                 ;                          //iSflag = 1;
             }
             else if (agentnum > agentNumother)
             {
                 iSCount++;                                //iSflag = 0;
             }
             else
             {
                 iSCount += RandomMan.getRand(2); //iSflag = RandomMan.getRand(2);
             }
         }
         else
         {
             iSCount++;
             //iSflag = 0;
         }
     }
 }
Пример #3
0
        public void Goal_determining()
        {
            memory.calcRewardStability(config.GoalNum, ref meanRewards, ref stdRewards, ref rewardCounts);
            memory.updateStanStepTables(ref IstepTable);
            Parallel.For(0, config.GoalNum, i =>
            {
                FstepTable[i] = false;
            });
            for (int j = 0; j < coopRange; j++)
            {
                double tmpIminstep = double.MaxValue; int tmpIminstepIndex = -1;
                for (int i = 0; i < config.GoalNum; i++)
                {
                    if (IstepTable[i] <= tmpIminstep && FstepTable[i] == false)
                    {
                        tmpIminstep      = IstepTable[i];
                        tmpIminstepIndex = i;
                    }
                }
                if (tmpIminstepIndex != -1)
                {
                    FstepTable[tmpIminstepIndex] = true;
                }
            }
            int goalNum = 0; double maxBid = 0;// bidValue[0];

            for (int i = 0; i < config.GoalNum; i++)
            {
                if (maxBid < bidValue[i] && FstepTable[i])
                {
                    maxBid  = bidValue[i];
                    goalNum = i;
                }
            }
            if (maxBid == 0 || RandomMan.getRand(100) < config.Randomly_Probability_of_Determination)
            {
                while (true)
                {
                    int randGoalnum = RandomMan.getRand(config.GoalNum);
                    if (FstepTable[randGoalnum])
                    {
                        bidCount[randGoalnum]++;
                        iS = randGoalnum;
                        if (config.Communication == "OFF")
                        {
                            if ((meanRewards[iS] > rewardTable[iS] * 0.5) || (RandomMan.getRand(100) < 30) /* && (stdRewards[iS] < rewardTable[iS] * 0.1)/**/)
                            {
                                iSflag = 1;
                            }
                            else
                            {
                                iSflag = 0; /**/
Пример #4
0
        /// <summary>
        /// 行動を選ぶメソッド
        /// </summary>
        /// <returns></returns>
        public void ChooseAction(bool judgeFlag)
        {
            int zeroCount = 0;

            if (actionNum != actionSet.ActionSetSize - 1)
            {
                pastactionNum = actionNum;
            }
            if (goalFlag == true)
            {
                actionNum    = actionSet.ActionSetSize - 1;
                maxactionNum = actionNum;
            }
            else
            {
                for (int i = 0; i < actionSet.ActionSetSize - 1; i++)
                {
                    if (actionSet[i].SendQvalue(state) == 0)
                    {
                        zeroCount++;
                    }
                    if (actionSet[actionNum].SendQvalue(state) < actionSet[i].SendQvalue(state))
                    {
                        actionNum = i;
                    }
                    else if (actionSet[actionNum].SendQvalue(state) == actionSet[i].SendQvalue(state))
                    {
                        if (RandomMan.getRand(2) > 0)
                        {
                            actionNum = i;
                        }
                    }
                }
                maxactionNum = actionNum;
                if (RandomMan.getRand(100) < randomNum || zeroCount == config.ActionCount - 1)
                {
                    actionNum = RandomMan.getRand(actionSet.ActionSetSize - 1);
                }
                //if (judgeFlag == false) /*BoltzmannChooseAction();/**/
            }
        }