public float priorityFor(Actor actor) {
    if (type == TYPE_WANDERING) {
      return IDLE ;
    }
    //
    //  Favour patrols through more dangerous areas in absolute terms, but not
    //  in relative terms.  (i.e, go where you're needed, but won't get killed.)
    float absDanger = 0, relDanger = 0 ;
    if (actor.base() != null) for (Target t : patrolled) {
      final Tile u = actor.world().tileAt(t) ;
      absDanger += actor.base().dangerMap.longTermVal(u) ;
      relDanger += Plan.dangerPenalty(t, actor) ;
    }
    absDanger /= patrolled.size() ;
    relDanger /= patrolled.size() ;
    
    final float skill = actor.traits.traitLevel(SURVEILLANCE) / 10f ;
    float impetus = Math.max(skill * absDanger, priorityMod / 2) ;
    impetus -= relDanger * PARAMOUNT ;
    
    if (verbose) I.sayAbout(actor,
      "Rel/abs danger: "+relDanger+"/"+absDanger+
      "\nPatrol impetus is: "+impetus
    ) ;
    return Visit.clamp(priorityMod + impetus, 0, URGENT) ;
  }