inverse design algorithm