Forcespro和Casadi的使用心得

news/2024/11/29 2:30:38/

一、前言

很久没更新过了,这次更新一下关于forcespro和casadi的使用心得。

二、学习方法

建议先学forcespro,因为它的文档相对来说比较完整,更易学习。至于forcespro的许可证以及安装,我前面的文章里有,其它的查使用手册即可,一般用的非凸优化就是那个high-level,对着它的例子学就行。

接下来建议再补充学习一个casadi,你会发现有了forcespro的基础以后就很好学习casadi,并且会发现就定义而言,casadi的各种定义更加灵活,用的也算顺手。

但后面你会发现,forcespro实在是太快了,还得是它。

三、心得和小技巧

1、Forcespro的一个错误理解

注意:这里是一个错误理解。我之前因为领会了casadi的灵活性,然后又有一个优化问题在forcespro下实现的效果非常奇怪,而在casadi下正常导致了一个错误理解。后面发现了正确原因,但是当时真是没想到,误以为是另一个错误原因。接下来描述一下这个错误理解。

因为forcespro的定义都是分阶段的,从1到N。(这里其实是一个技巧,就是forcespro的目标函数、不等式等是可以分阶段定义的,比如1到3一个目标函数,3到N一个目标函数,定义方法是xxx{i})然后赛车场景为了全局最优一般是定义为最后一个阶段N的进度最多。所以当时我以为是因为Forcespro的求解是一个阶段一个阶段的求解,所以没有实现不了这种类型的全局最优,然后我以为casadi的灵活性保证了它可以定义为这种全局最优。但事实上,Forcespro和Casadi的求解方式是一样的,一次计算出所有变量。

2、一些技巧和心得

(1)可以分阶段定义目标函数、不等式等

(2)可以把

FORCES_NLP(model, codeoptions, output);

这一部分和调用分开

[output, exitflag, info] = FORCESNLPsolver(problem);

前一部分定义model,生成代码。而后一部分是对代码的调用。这样可以使主函数不用每次都重复生成代码的部分(要接近一分钟),当然,如果你调整了优化问题的结构,就需要重新生成代码,如果只是调整了实时参数,那就可以舒舒服服继续使用主函数。

(3)forcepro比casadi的优点之一是可以输出exitflag。在casadi你同样可以查看求解质量,但是没办法让它输出一个flag。而forcespro可以输出这个flag从而你可以用if语句干点别的事,根据求解质量执行一些操作。

(4)优化问题的排查,这是一个非常重要的点。无论多简单的优化问题,哪怕是已经在casadi实现的问题改写成forcepro,一定要一步一步开始。具体步骤是:[1]先只设置目标函数和动态方程[2]变量约束[3]不等式约束一个一个来[4]其它拓展。注意:一旦有一步出问题,问题一定就在那一步,千万别跳过它继续。我的一个血的教训就是vmin的设置问题,它使得最终的效果非常之离谱,而我因为没一步一步来,过了半年才找到这个离谱的错误,还是在我午睡的时候突然意识到的。


http://www.ppmy.cn/news/48746.html

相关文章

结构思考力--李忠秋

理解篇–透过结构看世界 结构化思考的底层逻辑 第1讲:透过结构看世界,洞悉事物本质 世界万事万物都是存在其结构的,比如一年四季分为春夏秋冬,一家公司组织结构依次从董事、事业群、事业线及业务线等; 因此我们通过结构去看事物…

日本政府官宣:投资42亿日元,量子计算要上“云”

引《日经新闻》报道,日本政府宣布将投资4.2亿日元(约合2.18亿人民币)来支持量子计算领域的发展。这笔资金将被用于扩大云计算平台上的共享量子计算能力,为企业提供更加高效的量子计算服务。该计划将由东京大学领导,支持…

找不到msvcp140d.dll vcruntime140d.dll ucrtbased.dll

找不到msvcp140d.dll vcruntime140d.dll ucrtbased.dll 找不到msvcp140d.dll vcruntime140d.dll ucrtbased.dll 找不到msvcp140d.dll vcruntime140d.dll ucrtbased.dll 链接:https://pan.baidu.com/s/15O9cRwexHp4nzZj8eYVfnw 提取码:4iyr --来自百度…

【Microsoft Edge】详解 Edge 的扩展程序

Edge 扩展程序 安装与卸载显示与隐藏开启与关闭导入与导出导出导入操作好处与优势 安装与卸载 可从 https://microsoftedge.microsoft.com/addons?hlzh-CN 获取你想要的扩展程序。 也可以使用 Chrome Web Store ,但出于某些原因,需要科学上网。 获取后…

给定一个正整数字符串,使用Python正则表达式在其千分位上添加逗号

点击上方“Python爬虫与数据挖掘”,进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 楼阁玲珑五云起,其中绰约多仙子。 大家好,我是皮皮。 一、前言 前几天在Python黄金青铜群【沐】问了一个Python正则表达式的问题…

RabbitMQ的五种工作模式

目录 前言介绍 (1)启动RabbitMQ (2)账户管理 一、简单模式 (1)概念 (2)生产者代码 (3)消费者代码 二、工作队列模式 (1)概念…

嵌入式【协议篇】CAN协议原理

一、CAN协议介绍 1、简介 CAN是控制器局域网络(Controller Area Network, CAN)的简称,是一种能够实现分布式实时控制的串行通信网络。 其实可以简单把CAN通信理解成开一场电话会议,当一个人讲话时其他人就听(广播),当多个人同时讲话时则根据一定规则来决定谁先讲话谁后讲…

leetcode551. 学生出勤记录 I

题目描述解题思路执行结果 leetcode551. 学生出勤记录 I . 题目描述 给你一个字符串 s 表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符: A:Absent&#xff…