Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Convert between CEC and PVsyst single diode models #2212

Draft
wants to merge 8 commits into
base: main
Choose a base branch
from

Conversation

cwhanse
Copy link
Member

@cwhanse cwhanse commented Sep 16, 2024

  • Closes Add converters between single diode models #1935
  • I am familiar with the contributing guidelines
  • Tests added
  • Updates entries in docs/sphinx/source/reference for API changes.
  • Adds description and name entries in the appropriate "what's new" file in docs/sphinx/source/whatsnew for all changes. Includes link to the GitHub Issue with :issue:`num` or this Pull Request with :pull:`num`. Includes contributor name and/or GitHub username (link with :ghuser:`user`).
  • New code is fully documented. Includes numpydoc compliant docstrings, examples, and comments where necessary.
  • Pull request is nearly complete and ready for detailed review.
  • Maintainer: Appropriate GitHub Labels (including remote-data) and Milestone are assigned to the Pull Request and linked Issue.

Primary reference is in review. Feedback on function naming and signature is welcome.

15, 25, 50, 75, 15, 25, 50, 75, 15, 25, 50, 75]]).T,
dtype=np.float64)


Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@adriesse
Copy link
Member

Feedback on function naming and signature is welcome.

I guess one might discuss whether you are converting models or sets of parameters.

@cwhanse
Copy link
Member Author

cwhanse commented Sep 19, 2024

Test failure for ubuntu-latest, 3.8, conda, -min is because that environment installs scipy=1.6.0, which doesn't allow for constraints when using Nelder-Mead, so the optimizer gets a different, unsatisfactory, solution.

@echedey-ls
Copy link
Contributor

echedey-ls commented Sep 19, 2024

I guess one might discuss whether you are converting models or sets of parameters.

@adriesse , do you have any proposal in mind? For example, cec_params_to_pvsyst, params[_from]_pvsyst_to_cec [params_pvsyst2cec]. I don't really have a strong preference on wording.

scipy=1.6.0, which doesn't allow for constraints when using Nelder-Mead

scipy=1.7.0 is the first version to support it, and is also supported in Py3.9 (taking into account upcoming drop of Py3.8 support). I would edit this requirement for future >=Py3.9 release (#2213).

Source of scipy docs on nelder-mead; scipy 1.6.3 bumps to 1.7.0:

@mikofski
Copy link
Member

Is the simplex solver required? Why not try Powell instead?

@cwhanse
Copy link
Member Author

cwhanse commented Sep 20, 2024

Is the simplex solver required? Why not try Powell instead?

@leliadeville

@leliadeville
Copy link

Is the simplex solver required? Why not try Powell instead?

@mikofski I used Nelder-Mead to develop and check the algorithm, but I think the optimization method would be good to have as a parameter.

@mikofski
Copy link
Member

Any particular reason for choosing Simplex? Good idea to make method a parameter. I would be curious to see how other methods like Powell compare. My experience is that the system of equations is stiff and requires some transformation to improve the condition. An excellent primer for selecting methods is https://gael-varoquaux.info/scipy-lecture-notes/advanced/mathematical_optimization/index.html#choosing-a-method

@cwhanse
Copy link
Member Author

cwhanse commented Sep 21, 2024

For context, here's the submitted paper. The main point is determining that optimization is preferred over two other techniques (functions currently in pvlib, and an approach that equates quantities that should have the same values at the reference condition.) The optimization could certainly be tuned and improved.

sdm_translation_submitted.pdf

@mikofski
Copy link
Member

The main point is determining that optimization is preferred …

I agree 💯. I wrote a blog on using implicit methods to solve SDM system of equations with several gists comparing
using convex optimization after transforming the variables to improve the condition of the Jacobian to explicit methods using Bishop’s method. Because the equations are differential I used the SciPy wrapper around the MINPACK FORTRAN HYBRDJ solver but other solvers might be more efficient.

@mikofski
Copy link
Member

I understand now, after reading the paper. This is a method of directly obtaining parameters without generating an IEC-61853 matrix as the go between first. Very clever! So the minimization method of the objective function is secondary, and there are no variables to transform. Thanks for patiently explaining. Great job @leliadeville

@cwhanse
Copy link
Member Author

cwhanse commented Sep 21, 2024

This is a method of directly obtaining parameters without generating an IEC-61853 matrix as the go between first.

I may be misunderstanding, but generating the IEC-61853 matrix data for the source model is the first step. The target model's parameters are found by fitting the target model to the IEC-61853 matrix data.

@mikofski
Copy link
Member

You are right. Sorry I misread. Looking again, this does solve each model independently from the matrix. Honestly I’m not sure what I was thinking before.

However, I think it would be interesting to see by comparison a method that does use the Jacobian, similar to what I discussed in the gist linked above or in PVMismatch gen_coeffs(), the two approaches differ by single and two diode model, but both transform the variables into either parabolic or log space and then use a gradient search method to solve the convex optimization problem. The method may suffer from poor initial guess but typically converges faster than simplex. Anyway, there is no publication, so I apologize for ranting. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add converters between single diode models
5 participants