FreeCAD求解器PlaneGCS的求解算法?

Chinese forum

Moderator: paullee

Forum rules
论坛规矩 / 論壇規矩 , 有用的资讯 / 有用的資訊
重要:寻求帮助之前,请先看看这里 /
重要:尋求幫助之前,請先看看這裡

另外,对论坛用户 友善!阅读FreeCAD 行为准则!
/ 另外,對論壇用戶 友善! 閱讀FreeCAD
行為準則
Post Reply
_Nemo
Posts: 117
Joined: Sat Feb 06, 2021 8:25 am

FreeCAD求解器PlaneGCS的求解算法?

Post by _Nemo »

PlaneGCS中有四种求解算法:DogLeg、LM、BFGS和SQP,在求解过程中是依次调用的(第一种不行就用第二种),我发现Sketch.cpp中四种算法的调用顺序是DogLeg、LM、BFGS、SQP。请问这样安排算法顺序的原则是什么?是否是排在前面的算法效率更高且适用范围更大呢?
我是一名PlaneGCS的初学者,希望各位大佬多多指教!
_Nemo
Posts: 117
Joined: Sat Feb 06, 2021 8:25 am

Re: FreeCAD求解器PlaneGCS的求解算法?

Post by _Nemo »

或者说应当如何设计测试用例来测试呢?
paullee
Veteran
Posts: 5097
Joined: Wed May 04, 2016 3:58 pm

Re: FreeCAD求解器PlaneGCS的求解算法?

Post by paullee »

_Nemo wrote: Fri Apr 02, 2021 6:44 am PlaneGCS中有四种求解算法:DogLeg、LM、BFGS和SQP ...
甚麼是 PlaneGCS ? :oops:
_Nemo
Posts: 117
Joined: Sat Feb 06, 2021 8:25 am

Re: FreeCAD求解器PlaneGCS的求解算法?

Post by _Nemo »

paullee wrote: Fri Apr 02, 2021 11:32 am
_Nemo wrote: Fri Apr 02, 2021 6:44 am PlaneGCS中有四种求解算法:DogLeg、LM、BFGS和SQP ...
甚麼是 PlaneGCS ? :oops:
就是FreeCAD使用的几何约束求解器 :)
https://github.com/FreeCAD/FreeCAD/tree ... p/planegcs
paullee
Veteran
Posts: 5097
Joined: Wed May 04, 2016 3:58 pm

Re: FreeCAD求解器PlaneGCS的求解算法?

Post by paullee »

_Nemo wrote: Sat Apr 03, 2021 10:50 am 就是FreeCAD使用的几何约束求解器 :)
https://github.com/FreeCAD/FreeCAD/tree ... p/planegcs
看來是 @abdullah 的範疇,但他應不懂中文 :)

試麻煩@realthunder 問一下 :D
realthunder wrote: ping
_Nemo
Posts: 117
Joined: Sat Feb 06, 2021 8:25 am

Re: FreeCAD求解器PlaneGCS的求解算法?

Post by _Nemo »

paullee wrote: Sat Apr 03, 2021 11:37 am
看來是 @abdullah 的範疇,但他應不懂中文 :)

試痲煩@realthunder 問一下 :D
realthunder wrote: ping
感谢! :D
realthunder
Veteran
Posts: 2190
Joined: Tue Jan 03, 2017 10:55 am

Re: FreeCAD求解器PlaneGCS的求解算法?

Post by realthunder »

这个我也不太清楚。不过我想应该不会依次选算法吧?你可以打开算法高级设置自己试下。关于这些算法更多的资料可以参考SciPy文档。不过PlaneCSG并没有使用SciPy,所以可能会有些出入,仅供参考。

Screenshot from 2021-04-04 18-17-08.png
Screenshot from 2021-04-04 18-17-08.png (80.3 KiB) Viewed 43605 times
Screenshot from 2021-04-04 18-29-54.png
Screenshot from 2021-04-04 18-29-54.png (53.92 KiB) Viewed 43605 times
Try Assembly3 with my custom build of FreeCAD at here.
And if you'd like to show your support, you can donate through patreon, liberapay, or paypal
_Nemo
Posts: 117
Joined: Sat Feb 06, 2021 8:25 am

Re: FreeCAD求解器PlaneGCS的求解算法?

Post by _Nemo »

realthunder wrote: Sun Apr 04, 2021 10:31 am 这个我也不太清楚。不过我想应该不会依次选算法吧?你可以打开算法高级设置自己试下。关于这些算法更多的资料可以参考SciPy文档。不过PlaneCSG并没有使用SciPy,所以可能会有些出入,仅供参考。


Screenshot from 2021-04-04 18-17-08.png
Screenshot from 2021-04-04 18-29-54.png
太感谢了,帮助很大!以下是我截取的Sketch.cpp中的一部分代码,应该就是当默认算法失败后转向其他算法依次尝试吧。

Code: Select all

if(!valid_solution && !isInitMove) { // Fall back to other solvers
        for (int soltype=0; soltype < 4; soltype++) {

            if(soltype==defaultsoltype){
                    continue; // skip default solver
            }

            switch (soltype) {
            case 0:
                solvername = "DogLeg";
                ret = GCSsys.solve(isFine, GCS::DogLeg);
                break;
            case 1: // solving with the LevenbergMarquardt solver
                solvername = "LevenbergMarquardt";
                ret = GCSsys.solve(isFine, GCS::LevenbergMarquardt);
                break;
            case 2: // solving with the BFGS solver
                solvername = "BFGS";
                ret = GCSsys.solve(isFine, GCS::BFGS);
                break;
            case 3: // last resort: augment the system with a second subsystem and use the SQP solver
                solvername = "SQP(augmented system)";
                InitParameters.resize(Parameters.size());
                int i=0;
                for (std::vector<double*>::iterator it = Parameters.begin(); it != Parameters.end(); ++it, i++) {
                    InitParameters[i] = **it;
                    GCSsys.addConstraintEqual(*it, &InitParameters[i], GCS::DefaultTemporaryConstraint);
                }
                GCSsys.initSolution();
                ret = GCSsys.solve(isFine);
                break;
            }
paullee
Veteran
Posts: 5097
Joined: Wed May 04, 2016 3:58 pm

Re: FreeCAD求解器PlaneGCS的求解算法?

Post by paullee »

_Nemo wrote: Tue Apr 06, 2021 2:30 am 太感谢了,帮助很大!以下是我截取的Sketch.cpp中的一部分代码,应该就是当默认算法失败后转向其他算法依次尝试吧。
不知道現時是否只是@abdullah 在做Sketcher, 他也不是地道 說英文的,如果你英文 可以 的話可在主論譠上討論一下 :D
_Nemo
Posts: 117
Joined: Sat Feb 06, 2021 8:25 am

Re: FreeCAD求解器PlaneGCS的求解算法?

Post by _Nemo »

paullee wrote: Tue Apr 06, 2021 6:04 am 不知道現時是否只是@abdullah 在做Sketcher, 他也不是地道 說英文的,如果你英文 可以 的話可在主論譠上討論一下 :D
好的,再次表示感谢! :D
Post Reply