Question: What the software developers actually program into their avatars?
It boils down to implementing 4 methods.
Method "refute", given a set of claims, it picks a few (configurable) claims for refutation. The implementation picks those claims with too strong of a quality value or resource bound. It reflects the software developer's analysis of the problem domain (or the performance of their solver in the secret case). One possible implementation is to pick a few instances within the claim instance set and apply the solve method to them.
The method "strengthen" selects a few claims to strengthen. Again, the logic reflects the software developer's analysis of the problem domain (or the performance of their solver).
The method "createProb" selects an instance within the set of an instances that the opponent is making a claim about. The goal is to invalidate the opponent's claim.
Propose can be thought of as a cross-testing mechanism. Again, selecting an appropriate claim comes from the problem domain analysis (or the performance of their solver). The "propose" method puts out a few claims. The claims are about the problem domain (or about their opponents solver performance in the secret case). The logic reflects the software developer's analysis of the problem domain where they find the hardest to solve instances in the domain.
The "solve" method, implements the desired functionality.
The interfaces are:
public List < RefuteTrans > refute(List < Claim > chs, PlayerContext context){ ... } public List < StrengthenTrans > strengthen(List < Claim > chs, Config config){ ... } public List < ProposeTrans > propose(PlayerContext context){ ... } protected Instance createInstance(Claim t){ ... } protected Solution solve(Instance ch, Claim t){ ... }