In order to solve knapsack problems efficiently, an improved genetic algorithm based on adaptive evolution in dual population (called DPAGA) is proposed. In DPAGA, the new population produced by selecting operation is regarded as main population. The population composed by the individuals washed out by selecting operation is regarded as subordinate population. The individual evolution strategy of main population is different from that of subordinate population. The crossover operators and mutation operators are all adjusted non-linearly and adaptively. DPAGA is used to solve knapsack problems. The experimental results show that its convergence speed and solution quality are all better then that of simple genetic algorithm. It is also suited to solve other optimization problems.