WEBVTT

00:00:00.880 --> 00:00:04.400
Hi everyone, this is Solomon Freer from PV Lighthouse.

00:00:04.480 --> 00:00:06.871
In this video, I'm going to give you a tutorial ...

00:00:06.871 --> 00:00:10.079
on our latest new feature for SunSolve Power, the Optimiser.

00:00:10.400 --> 00:00:13.524
You may already be familiar with our tool for sweeping cell ...

00:00:13.524 --> 00:00:14.799
and module parameters.

00:00:15.360 --> 00:00:18.398
The optimisation update now allows users to harness an ...

00:00:18.398 --> 00:00:21.898
inbuilt evolutionary algorithm to find optimal combinations ...

00:00:21.898 --> 00:00:24.870
of parameters by exploring the ranges you set for them ...

00:00:24.870 --> 00:00:28.238
and finding the best result based on your predefined metric.

00:00:29.040 --> 00:00:32.145
The benefit over sweeping is that the optimiser doesn't ...

00:00:32.145 --> 00:00:34.853
need to check the full resolution of your desired ...

00:00:34.853 --> 00:00:36.835
ranges, instead learning from each ...

00:00:36.835 --> 00:00:39.808
generation of results and producing new generations ...

00:00:39.808 --> 00:00:42.318
based on the best results of the previous one.

00:00:42.880 --> 00:00:46.299
I won't be going into the detail of the evolutionary algorithm ...

00:00:46.299 --> 00:00:48.731
we use in this video, but instead I'll give an ...

00:00:48.731 --> 00:00:51.492
overview of how to use the optimiser tool to get the ...

00:00:51.492 --> 00:00:52.478
results you need.

00:00:53.040 --> 00:00:55.565
However, if if you go to the about tab ...

00:00:55.565 --> 00:00:58.763
and select Solver, then you can scroll down to ...

00:00:58.763 --> 00:01:01.961
Optimisation routine and options to get more ...

00:01:01.961 --> 00:01:05.748
information about how our algorithm works and how you ...

00:01:05.748 --> 00:01:10.798
can change the user options to fine tune the optimization to your needs.

00:01:14.320 --> 00:01:15.154
So, to start,

00:01:15.154 --> 00:01:18.872
what you'll want to do is load a simulation file that you're ...

00:01:18.872 --> 00:01:20.238
looking to optimise.

00:01:21.200 --> 00:01:24.093
If it's already been solved, then you'll want to duplicate it ...

00:01:24.093 --> 00:01:26.079
so that you can set it up for optimisation.

00:01:26.480 --> 00:01:28.453
And if you don't have a simulation file,

00:01:28.453 --> 00:01:31.383
you can start with one of our provided templates and edit it ...

00:01:31.383 --> 00:01:32.878
to match your target problem.

00:01:35.200 --> 00:01:38.749
So then once you've got your simulation file ready,

00:01:38.749 --> 00:01:42.050
you'll head over to the Solver tab under Inputs,

00:01:42.050 --> 00:01:45.599
and you'll select your solve type as optimisation.

00:01:47.760 --> 00:01:51.744
So from here you can see that in order to start having inputs ...

00:01:51.744 --> 00:01:54.915
for optimisation, you'll need to activate the ...

00:01:54.915 --> 00:01:58.655
wand to enable the adding and removing of optimisation ...

00:01:58.655 --> 00:02:02.639
inputs so you can go over to the tab that's relevant for you.

00:02:03.280 --> 00:02:06.117
So in this case, I've loaded a tandem module ...

00:02:06.117 --> 00:02:08.559
with perovskite and silicon layers.

00:02:08.880 --> 00:02:13.291
So first I'll choose the thickness of the silicon layer ...

00:02:13.291 --> 00:02:16.359
as a sweep input for the optimisation.

00:02:16.760 --> 00:02:19.571
And then secondly, I'll go over and find the ...

00:02:19.571 --> 00:02:23.319
perovskite layer and select that for optimisation also.

00:02:24.360 --> 00:02:27.264
Then on the solver tab, you can now see that there's ...

00:02:27.264 --> 00:02:30.030
a number two here, indicating I've now selected ...

00:02:30.030 --> 00:02:32.381
two different inputs for optimisation,

00:02:32.381 --> 00:02:35.078
and they appear here under Inputs to optimise.

00:02:36.120 --> 00:02:40.150
So the next step is to choose the ranges that you're looking ...

00:02:40.150 --> 00:02:43.522
for to optimise over, so the ranges that you think ...

00:02:43.522 --> 00:02:46.318
you're likely to Find the right answers.

00:02:46.320 --> 00:02:48.551
And you can also choose your 'best guess'

00:02:48.551 --> 00:02:51.438
to help the optimisation algorithm look in the right ...

00:02:51.438 --> 00:02:54.719
regions in those early generations to speed up the process.

00:02:55.840 --> 00:02:58.853
So, for the 'slab 3a thickness',

00:02:58.853 --> 00:03:04.879
which is the silicon layer, I'm going to set a best guess of 180 µm.

00:03:05.360 --> 00:03:06.960
And you can see the units over here.

00:03:07.760 --> 00:03:12.846
And I'm going to allow it to sweep from 100 to 300 with a ...

00:03:12.846 --> 00:03:17.123
resolution of 5 µm, keeping in mind that when ...

00:03:17.123 --> 00:03:22.325
you've got a wider range with a very small resolution,

00:03:22.325 --> 00:03:28.798
it will likely take longer and use up more rays to get to the optimum.

00:03:28.800 --> 00:03:33.158
So if you're not sure, then you can often see it as ...

00:03:33.158 --> 00:03:38.497
best to use a larger resolution at first and get a rough idea ...

00:03:38.497 --> 00:03:41.439
before you really try to hone in.

00:03:42.240 --> 00:03:45.154
So, for the perovskite layer,

00:03:45.154 --> 00:03:49.467
I'm going to allow it to sweep from 20 up to 400 ...

00:03:49.467 --> 00:03:52.731
nanometers, and I'll do this in 20 ...

00:03:52.731 --> 00:03:54.479
nanometer steps.

00:03:54.560 --> 00:03:56.492
Sorry, 20 nanometer steps,

00:03:56.492 --> 00:03:57.920
with a best guess...

00:03:57.920 --> 00:04:00.240
...let's put it at 100 to start.

00:04:01.600 --> 00:04:04.000
Now, you'll now want to choose your goal.

00:04:04.080 --> 00:04:05.576
So, for this situation,

00:04:05.576 --> 00:04:09.839
I'm going to try to maximise the electrical power of the tandem cell.

00:04:09.840 --> 00:04:12.855
You can also choose the absorbed photon current in a ...

00:04:12.855 --> 00:04:15.519
particular layer or the electrical current.

00:04:17.360 --> 00:04:20.627
So now you get to the optimisation options,

00:04:20.627 --> 00:04:24.348
and you can choose the maximum number of runs that ...

00:04:24.348 --> 00:04:26.798
you'd like the optimiser to use.

00:04:26.800 --> 00:04:28.720
And if it reaches that maximum,

00:04:28.720 --> 00:04:33.079
it will stop and give you the best results so far before it's converged.

00:04:33.640 --> 00:04:36.806
If it's at the point where it's likely to go over your ...

00:04:36.806 --> 00:04:39.456
maximum run number, you can also change the ...

00:04:39.456 --> 00:04:41.959
number of rays that you're using per run.

00:04:42.120 --> 00:04:44.409
But be aware that if you reduce this number ...

00:04:44.409 --> 00:04:46.894
significantly, you're going to experience a ...

00:04:46.894 --> 00:04:48.921
lot more uncertainty in the results,

00:04:48.921 --> 00:04:51.472
which will affect the convergence and also the ...

00:04:51.472 --> 00:04:53.957
validity of the actual optimisation result.

00:04:54.200 --> 00:04:56.040
So don't change it unnecessarily.

00:04:57.160 --> 00:04:59.480
And you can also set a time limit for the optimisation.

00:04:59.880 --> 00:05:02.857
The maximum total raise will be calculated based on the ...

00:05:02.857 --> 00:05:05.639
maximum runs and the raise you've selected per run.

00:05:06.520 --> 00:05:09.361
Then there's the algorithm options for the genetic ...

00:05:09.361 --> 00:05:11.079
algorithm that we're running.

00:05:11.640 --> 00:05:14.139
You can read more about these options,

00:05:14.139 --> 00:05:16.638
as I said in the about tab under solver,

00:05:16.638 --> 00:05:20.386
but for this demonstration, I'm going to stick with these ...

00:05:20.386 --> 00:05:21.479
default values.

00:05:22.120 --> 00:05:26.140
One option that I will draw your attention to is the ...

00:05:26.140 --> 00:05:30.734
convergence tolerance, which basically says you'll see ...

00:05:30.734 --> 00:05:33.318
more explained in the about tab,

00:05:33.318 --> 00:05:37.721
but it tells the optimiser how how sure we want to be that ...

00:05:37.721 --> 00:05:41.741
the best results that we've seen are falling into a ...

00:05:41.741 --> 00:05:46.335
narrower enough range that we're confident that it's not ...

00:05:46.335 --> 00:05:50.355
currently still improving with each generation.

00:05:50.680 --> 00:05:53.765
So it's saying if you set this number to a large number,

00:05:53.765 --> 00:05:55.959
then you're going to converge faster.

00:05:56.120 --> 00:05:59.530
You're willing to accept that there might still be some ...

00:05:59.530 --> 00:06:01.976
uncertainty and you're not currently,

00:06:01.976 --> 00:06:05.163
you've not currently hit a plateau in your results,

00:06:05.163 --> 00:06:08.721
whereas if you set it smaller, then it'll be more strict in ...

00:06:08.721 --> 00:06:12.427
terms of the convergence and it will wait longer before it's ...

00:06:12.427 --> 00:06:15.318
certain that you're not going to do any better.

00:06:16.280 --> 00:06:18.765
But keep in mind that as you set this smaller,

00:06:18.765 --> 00:06:21.317
you're going to go through more generations,

00:06:21.317 --> 00:06:23.399
more runs, you might hit your maximum ...

00:06:23.399 --> 00:06:25.279
run limit, you will use more rays.

00:06:25.440 --> 00:06:27.200
So these are all things to be aware of.

00:06:28.240 --> 00:06:32.365
But so once you're ready, you can just hit play and then ...

00:06:32.365 --> 00:06:37.223
you'll see it submitted the job and it will get started and start ...

00:06:37.223 --> 00:06:41.439
going through some generations once the job has begun.

00:06:44.400 --> 00:06:47.060
In the meantime, while this is running,

00:06:47.060 --> 00:06:50.849
you can already see that it started on generation one and ...

00:06:50.849 --> 00:06:54.799
this download optimisation results button has appeared.

00:06:55.280 --> 00:06:58.966
If you hit download before the optimization is finished,

00:06:58.966 --> 00:07:02.498
you'll be able to download a CSV (file) with the current ...

00:07:02.498 --> 00:07:05.954
runs that have been simulated and you'll get an idea of ...

00:07:05.954 --> 00:07:08.718
where the optimisation is at at the moment.

00:07:08.880 --> 00:07:11.406
But it's not a very long process generally,

00:07:11.406 --> 00:07:14.564
so it's best to just wait until the end to look at the CSV ...

00:07:14.564 --> 00:07:16.318
(file) with the full results.

00:07:17.480 --> 00:07:19.704
In the meantime, while this is running,

00:07:19.704 --> 00:07:22.737
I can look closer at the about tab and step through some ...

00:07:22.737 --> 00:07:24.759
more detail about the convergence.

00:07:26.520 --> 00:07:29.425
So here's this convergence tolerance number,

00:07:29.425 --> 00:07:31.362
the 'k' that I was talking about ...

00:07:31.362 --> 00:07:33.448
before, and you can see from these ...

00:07:33.448 --> 00:07:36.279
images how the convergence tolerance works.

00:07:37.800 --> 00:07:40.519
So as we've got more and more runs,

00:07:40.519 --> 00:07:45.471
if the best runs have still quite a bit of variance about them,

00:07:45.471 --> 00:07:49.937
then this will mean that you're less likely to pass this ...

00:07:49.937 --> 00:07:53.918
convergence test depending on your value of 'k'.

00:07:54.080 --> 00:07:58.185
But as your best runs start to form a tighter distribution,

00:07:58.185 --> 00:08:02.374
then you can be more certain that the confidence interval of ...

00:08:02.374 --> 00:08:06.144
what the best value is has gotten tighter and compared ...

00:08:06.144 --> 00:08:09.998
to the confidence interval of your best results so far.

00:08:10.880 --> 00:08:13.510
Then depending on the value of 'k',

00:08:13.510 --> 00:08:17.411
you can meet convergence based on how tightly these ...

00:08:17.411 --> 00:08:19.679
best values are distributed.

00:08:21.040 --> 00:08:23.777
So now if we go back to the inputs tab,

00:08:23.777 --> 00:08:26.879
we can see it's now up to generation five.

00:08:29.280 --> 00:08:33.717
So I'll put a cut in the video here to skip forward to when ...

00:08:33.717 --> 00:08:35.839
this is finished solving.

00:08:39.400 --> 00:08:42.152
So now that the optimisation is complete,

00:08:42.152 --> 00:08:46.084
you'll see that there's these result values highlighted in ...

00:08:46.084 --> 00:08:48.758
green under the inputs to optimise area.

00:08:49.800 --> 00:08:53.023
In this case, we can see that it found the ...

00:08:53.023 --> 00:08:57.809
best value for the silicon slab thickness was 230 µm and for ...

00:08:57.809 --> 00:08:59.958
the perovskite was 400 nm.

00:09:00.280 --> 00:09:03.570
Unfortunately, this is a case where it the ...

00:09:03.570 --> 00:09:07.519
boundary of my range ended up being the best value.

00:09:08.160 --> 00:09:11.987
So this tells you that you need to run the optimisation again ...

00:09:11.987 --> 00:09:15.279
with a broader range in order to find a true optimum.

00:09:15.280 --> 00:09:19.403
Because it's telling you that it hasn't tested values further ...

00:09:19.403 --> 00:09:23.050
than this boundary and the boundary value gave the best ...

00:09:23.050 --> 00:09:24.239
result possible.

00:09:24.800 --> 00:09:27.545
But looking closer, we can see what the power ...

00:09:27.545 --> 00:09:29.919
that it found for this best result was.

00:09:29.920 --> 00:09:32.916
If you go to the outputs tab and and you check in this ...

00:09:32.916 --> 00:09:35.912
case the 'Module JV'. If you were optimising other ...

00:09:35.912 --> 00:09:38.123
parameters, you could look at some of ...

00:09:38.123 --> 00:09:41.261
these other tabs to find the relevant area to find the ...

00:09:41.261 --> 00:09:42.759
optimum that you wanted.

00:09:43.000 --> 00:09:45.569
But of course, all of this information is also ...

00:09:45.569 --> 00:09:49.559
available in the CSV (file) if you download the optimisation results.

00:09:52.520 --> 00:09:54.527
But so... to prepare for a new ...

00:09:54.527 --> 00:09:58.206
optimisation where we can include a broader range so ...

00:09:58.206 --> 00:10:01.718
that we can test the full optimisation beyond just ...

00:10:01.718 --> 00:10:05.314
getting stuck at this boundary, what we want to do is ...

00:10:05.314 --> 00:10:09.077
duplicate the simulation and then edit these ranges.

00:10:11.240 --> 00:10:13.400
So because this value got stuck,

00:10:13.400 --> 00:10:15.320
we'll increase it to 1000 nm.

00:10:15.720 --> 00:10:18.942
And then we'll also increase this lower value to 300 (nm) ...

00:10:18.942 --> 00:10:21.959
because we don't want to recheck the lower range that ...

00:10:21.959 --> 00:10:23.399
we've already ruled out.

00:10:24.440 --> 00:10:27.193
Then we'll also want to increase this best guess to ...

00:10:27.193 --> 00:10:29.159
make sure it's within our new range.

00:10:30.680 --> 00:10:33.240
But I'll show you in a minute what happens if you don't do this.

00:10:33.640 --> 00:10:36.997
So let's also update the 'slab 3a thickness'

00:10:36.997 --> 00:10:39.719
to look between 200 and 300 microns.

00:10:39.720 --> 00:10:44.120
But let's leave the best guess outside of this range and hit play.

00:10:44.680 --> 00:10:46.609
And you'll see 'Validation Failed'

00:10:46.609 --> 00:10:49.759
'Simulation not started, validations of inputs failed.'

00:10:49.760 --> 00:10:51.960
You can see the Info tab for more details.

00:10:52.360 --> 00:10:55.080
'Best guess too low' on the Info tab.

00:10:55.560 --> 00:10:59.171
So it'll warn you if there's an issue with the way that you've ...

00:10:59.171 --> 00:11:00.759
set up your optimisation.

00:11:01.080 --> 00:11:03.080
And you'll just need to edit this.

00:11:03.800 --> 00:11:08.167
So then we can then change the best guess to a valid value ...

00:11:08.167 --> 00:11:12.439
and hit play and then it'll start and submit properly.

00:11:12.680 --> 00:11:16.598
But what I'll do is I'll stop that one and I'll skip to the finished ...

00:11:16.598 --> 00:11:18.919
version, which I've already run here.

00:11:19.880 --> 00:11:24.044
So in this finished version, it's now found an optimum ...

00:11:24.044 --> 00:11:27.190
silicon Thickness in this case of 270 µm,

00:11:27.190 --> 00:11:29.873
which is nicely within our bounds,

00:11:29.873 --> 00:11:32.834
and for the perovskite layer of 460 nm,

00:11:32.834 --> 00:11:35.517
which is also within these bounds.

00:11:35.600 --> 00:11:39.316
So now we can be a lot happier with the result and we ...

00:11:39.316 --> 00:11:42.035
can go to the outputs tab 'Module JV'

00:11:42.035 --> 00:11:45.660
in this case and look at the maximum power for the ...

00:11:45.660 --> 00:11:50.010
module and see 703.4 watts, which is higher than the value ...

00:11:50.010 --> 00:11:52.638
we saw in the previous simulation.

00:11:52.880 --> 00:11:56.500
So we know that it has improved and we can be ...

00:11:56.500 --> 00:11:58.879
happy with this new result.

00:11:59.680 --> 00:12:04.870
But if we want to look closer, we can then download the ...

00:12:04.870 --> 00:12:08.645
optimisation results as a CSV (file),

00:12:08.645 --> 00:12:13.599
pull them up and then in this CSV file we now have the ...

00:12:13.599 --> 00:12:17.374
columns with the 'Generation number'

00:12:17.374 --> 00:12:21.738
and we can see that it took five generations,

00:12:21.738 --> 00:12:26.220
the 'Run number' taking something around 100 ...

00:12:26.220 --> 00:12:29.877
runs and then the number of rays used.

00:12:30.680 --> 00:12:34.404
So this is a cumulative column and sometimes you'll see a ...

00:12:34.404 --> 00:12:36.543
'-1' as the run number and you'll ...

00:12:36.543 --> 00:12:38.999
notice that the rays don't increase.

00:12:39.640 --> 00:12:44.188
This is because basically a repeat combination of ...

00:12:44.188 --> 00:12:48.519
parameters has appeared in the new generation.

00:12:48.840 --> 00:12:53.354
And rather than rerunning this same parameter combination ...

00:12:53.354 --> 00:12:56.875
that's appeared, we just use the old values and ...

00:12:56.875 --> 00:13:01.118
still pass on those genes within the genetic algorithm.

00:13:01.200 --> 00:13:04.240
But we don't use rays on running this same ...

00:13:04.240 --> 00:13:05.760
combination again.

00:13:06.320 --> 00:13:10.355
So that will possibly confuse you if you haven't watched ...

00:13:10.355 --> 00:13:12.759
this video and you're doing this.

00:13:12.760 --> 00:13:16.411
But hopefully now you'll understand what those -1's ...

00:13:16.411 --> 00:13:18.319
mean and why they're there.

00:13:18.800 --> 00:13:22.049
There's also some notes here telling you which generation ...

00:13:22.049 --> 00:13:25.099
that they were similar to in this notes column at the end ...

00:13:25.099 --> 00:13:26.159
of this CSV (file).

00:13:27.840 --> 00:13:32.195
The most important columns for us though are the 'Output ...

00:13:32.195 --> 00:13:34.697
value', which in this case is the ...

00:13:34.697 --> 00:13:37.662
module power and the 'Output conf95',

00:13:37.662 --> 00:13:41.832
which is telling you the confidence that SunSolve has ...

00:13:41.832 --> 00:13:46.558
in this value based on the ray tracing the number of rays used.

00:13:46.800 --> 00:13:49.840
And so it gives you an idea of the uncertainty in this value.

00:13:52.800 --> 00:13:57.248
So going back to the SunSolve tab and we can see ...

00:13:57.248 --> 00:14:03.920
that in this case we've got a happy result compared to the CSV (file).

00:14:04.400 --> 00:14:09.468
We can see that the value that we got of 703 is looking ...

00:14:09.468 --> 00:14:13.239
good compared to the rest of the range.

00:14:13.800 --> 00:14:17.426
And we can tell that we've basically found a good ...

00:14:17.426 --> 00:14:21.596
optimum within all of the different combinations that ...

00:14:21.596 --> 00:14:25.313
we've checked here and achieving the goal of this ...

00:14:25.313 --> 00:14:27.398
optimisation in this case.

00:14:29.880 --> 00:14:31.552
So that is, in summary,

00:14:31.552 --> 00:14:33.400
how to use the optimiser.

00:14:33.800 --> 00:14:38.518
In future we can do some deeper dive videos subject to ...

00:14:38.518 --> 00:14:41.199
anyone's further questions.

00:14:41.200 --> 00:14:45.053
So if you have anything else that you'd like us to cover for ...

00:14:45.053 --> 00:14:47.862
a future video relating to the Optimiser,

00:14:47.862 --> 00:14:50.993
please reach out and we can see how we can go with ...

00:14:50.993 --> 00:14:52.518
creating such a video.