private static Skill pickResearchTopic(Actor actor, Archives archives) {
    final World world = actor.world() ;
    final Background v = actor.vocation() ;
    
    //
    //  Pick skills relevant to the actor's current job (or one they aspire to).
    //  TODO:  Have the actor's core AI make this selection at infrequent
    //  intervals, more thoroughly.  That's their 'ambition'.
    
    Background ambition = v ;
    float bestRating = Career.ratePromotion(v, actor) * Rand.num() * 2 ;
    for (Background b : Background.ALL_BACKGROUNDS) {
      if (b.guild == Background.NOT_A_GUILD) continue ;
      if (b.guild != v.guild && Rand.index(5) != 0) continue ;
      //
      //  Improve the rating if the career is available nearby:
      float rating = Career.ratePromotion(b, actor) ;
      if (world.presences.randomMatchNear(b, archives, -1) != null) {
        rating *= 2 ;
      }
      if (rating > bestRating) { bestRating = rating ; ambition = b ; }
    }
    if (ambition == null) return null ;
    
    //
    //  Then, pick out a skill relevant to the occupation-
    Skill topic = null ;
    bestRating = 0 ;
    for (Skill s : COGNITIVE_SKILLS) {
      final float
        bonus = archives.researchBonus(s),
        levelGap = ambition.skillLevel(s) - actor.traits.traitLevel(s),
        rating = (levelGap + 10) * (2 + bonus) * Rand.avgNums(2) ;
      if (rating > bestRating) { bestRating = rating ; topic = s ; }
    }
    return topic ;
  }