change gen_random and optimize