Parameter output problem of genetic algorithm
古いコメントを表示
When I apply genetic algorithm to find the optimal parameter, before the parameter enters the algorithm, I have controlled the parameter to keep two decimals in their respective ranges, but when the final output, the optimal parameter returned is really six decimals. Why? What am I supposed to do? (Note: I need to keep two decimal places in the parameter before entering the algorithm, because a change of 0.001 in the parameter has a great effect on the result, so I can't round the result directly.)Look forward to your reply~
7 件のコメント
Walter Roberson
2023 年 11 月 7 日
The only way to control a ga parameter to two decimal places is to use an integer parameter with a range exactly 100 times larger than you ordinarily would, and then divide the parameter by 100 inside the objective function.
仟仟
2023 年 11 月 7 日
Walter Roberson
2023 年 11 月 7 日
When you have a ga parameter that is not an integer data-type, then ga will automatically try continuous parameter values between the upper and lower bound for the parameter. There is no way to tell ga to only try the parameter by 0.1 increments.
If you need a parameter to be a multiple of a fraction f (such as 1/10) then use integer parameter there, but divide the upper and lower bound for that position by f. Then inside of your objective function, multiply the received value by f.
For example
f = 0.1;
ga(@(x) (x*f - pi)^2, 1, [], [], [], [], -1/f, 5/f, [], 1) * f
ga stopped because the average change in the penalty function value is less than options.FunctionTolerance and the constraint violation is less than options.ConstraintTolerance.
ans =
3.1
The objective here was to find the multiple of 0.1 that is closest to pi
仟仟
2023 年 11 月 8 日
Walter Roberson
2023 年 11 月 8 日
Inside that complicated file, you can put in a line very close to the top, something like
x(7) = x(7)/10;
and then none of the rest of the file has to change.
仟仟
2023 年 11 月 9 日
Walter Roberson
2023 年 11 月 29 日
You will need to write your own genetic optimizer that executes the way you want the code to execute.
I personally do not think that what you want to do is consistent, but I will leave that up to you.
You might want to look in the File Exchange as there are some genetic algorithm implementations there that you might want to start with and then make your modifications.
回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Genetic Algorithm についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!