/// <summary> /// We generate options based on the current list of desires /// </summary> protected virtual IEnumerable <Desire <TAction, TAgent, TEnvironment> > GenerateOptions() { //remove desires which have been fulfilled Desires.RemoveAll(x => x.IsFulfilled()); //only achievable desires return(Desires.Where(x => x.IsAchievable())); }