I did this same project when I was in college - so it's no longer available as a thesis :)
Easy, cheesy. Nah, I was stepping the output voltage up to the value of the battery bank. I used a boost regulator topology and controlled the PWM. It's a classic linear programming problem.
1. Start by assuming given PWM value will be optimal (x.nom)
2. Output a slightly higher PWM value to the boost circuit (PWM = x.nom + h)
2. Record the output current (y.high)
3. Decrement the PWM value (PWM = x.nom - h)
4. Record the output current (y.low)
5. Ascertain whether the initial guess, x.nom, was high or low using (y.high - y.low)
6. Increment decrement x.nom accordingly.
7. Goto step 2
Now, you may be thinking that I solved your problem for you - I haven't. I gave you the starting point that most people already know. The problem with this method is transients. What happens when a cloud comes by? Typically, the output shoots up as the cloud comes near and drops harshly when the cloud is overhead. How do you deal with this effect on your algorithm?
Then, there's the battery voltage. You may be thinking it's steady, but again, it's not. your job is to deliver the maximum current to the battery, but optimal PWM will change as the battery is loaded by pumps, refrigerators, whatever.
Go forth, mull it over. By now, you have the education to do an excellent job, so put your basics in place, make some theories, and test them. Leave extra inputs to your micro and make mistakes fast.
Best Wishes,
Mike Fortner