P&O algorithm