Self-Assembly Of Semiconducting Polymers And Fullerenes For Photovoltaic Applications