from gbso.program.program import Program
|
|
|
|
EPSILON = 0.00001
|
|
|
|
DEFAULT_NUM_ITERS = 1_000_000
|
|
|
|
DEFAULT_PROB_OPCODE = 0.25
|
|
DEFAULT_PROB_OPERAND = 0.25
|
|
DEFAULT_PROB_SWAP = 0.25
|
|
DEFAULT_PROB_INSN = 0.25
|
|
|
|
DEFAULT_PROB_INSN_UNUSED = 0.1
|
|
|
|
|
|
def optimize(
|
|
prgm: Program,
|
|
num_iters: int = DEFAULT_NUM_ITERS,
|
|
prob_opcode: float = DEFAULT_PROB_OPCODE,
|
|
prob_operand: float = DEFAULT_PROB_OPERAND,
|
|
prob_swap: float = DEFAULT_PROB_SWAP,
|
|
prob_insn: float = DEFAULT_PROB_INSN,
|
|
prob_insn_unused: float = DEFAULT_PROB_INSN_UNUSED,
|
|
) -> Program:
|
|
prob_sum = sum([prob_opcode, prob_operand, prob_swap, prob_insn])
|
|
assert abs(1 - prob_sum) < EPSILON
|
|
|
|
return prgm
|