火车
在指定的环境中训练强化学习代理
语法
描述
使用默认训练选项在指定环境中训练一个或多个强化学习代理。虽然trainStats
=火车(env
,代理
)代理
是一个输入参数,在每次训练之后,火车
中指定的每个代理的参数代理
最大化他们从环境中获得的长期回报。这是可能的,因为每个代理都是句柄对象。当培训结束时,代理
反映每个代理在最后一个训练集结束时的状态。
执行与前面语法相同的训练。trainStats
=火车(代理
,env
)
火车trainStats
=火车(___,trainOpts
)代理
在env
,使用训练选项对象trainOpts
.使用训练选项指定训练参数,例如终止训练的标准、何时保存代理、要训练的最大集数以及每集的最大步数。在前面语法中的任何输入参数之后使用此语法。
中包含的代理参数的最后一个值和训练结果恢复训练trainStats
=火车(代理
,env
,prevTrainStats
)prevTrainStats
获得后的前一个函数调用火车
.
例子
训练一个强化学习代理
中配置的座席进行培训训练PG代理人平衡车杆系统示例,在相应的环境中。从环境中观测到的是一个矢量,其中包含了小车的位置和速度,以及杆子的角度位置和速度。该动作是一个有两个可能元素的标量(施加在推车上的力为-10或10牛顿)。
加载包含环境和已为其配置的PG代理的文件。
负载RLTrainExample.mat
使用指定一些训练参数rlTrainingOptions
.这些参数包括训练的最大次数、每集的最大步数以及终止训练的条件。对于本例,最多使用1000集,每集500步。指示训练在前五集的平均奖励达到500时停止。创建一个默认选项集,并使用点表示法更改一些参数值。
trainOpts = rlTrainingOptions;trainOpts。MaxEpisodes = 1000;trainOpts。MaxStepsPerEpisode = 500;trainOpts。StopTrainingCriteria =“AverageReward”;trainOpts。StopTrainingValue = 500;trainOpts。ScoreAveragingWindowLength = 5;
在培训期间,火车
命令可以保存结果良好的候选代理。进一步配置训练选项,当情节奖励超过500时保存一个代理。将代理保存到名为savedAgents
.
trainOpts。SaveAgentCriteria =“EpisodeReward”;trainOpts。SaveAgentValue = 500;trainOpts。SaveAgentDirectory =“savedAgents”;
最后,关闭命令行显示。打开强化学习插曲管理器,这样您就可以直观地观察训练进度。
trainOpts。Verbose = false;trainOpts。情节=“训练进步”;
现在可以训练PG代理了。对于本例中使用的预定义的卡杆环境,您可以使用情节
生成车杆系统的可视化。
情节(env)
当您运行此示例时,此可视化和强化学习集管理器都会随着每个训练集更新。将它们并排放在屏幕上观察进度,并训练代理。(这个计算可能需要20分钟或更长时间。)
trainingInfo = train(agent,env,trainOpts);
Episode Manager显示训练成功达到前五集平均奖励500的终止条件。在每次训练中,火车
更新代理
用上一集学到的参数。当训练结束时,您可以使用训练后的代理模拟环境来评估其性能。环境图在模拟期间更新,就像在训练期间一样。
simOptions = rlSimulationOptions(“MaxSteps”, 500);experience = sim(env,agent,simOptions);
在培训期间,火车
将满足指定条件的任何代理保存到磁盘trainOps。SaveAgentCritera
而且trainOpts。SaveAgentValue
.要测试任何这些代理的性能,可以从指定的文件夹中的数据文件中加载数据trainOpts。SaveAgentDirectory
,并使用该代理模拟环境。
训练多智能体执行协同任务
本示例展示如何在Simulink®环境中设置多代理训练会话。金宝app在本例中,您训练两个代理协作执行移动对象的任务。
本例中的环境是一个无摩擦的二维表面,其中包含用圆表示的元素。目标物体C用半径为2米的蓝色圆表示,机器人A(红色)和B(绿色)用半径各为1米的小圆表示。机器人试图通过碰撞施加力将物体C移动到半径为8米的环外。环境中的所有元素都有质量并遵循牛顿运动定律。此外,单元与环境边界之间的接触力被建模为弹簧和质量阻尼器系统。通过在X和Y方向上施加外力,元件可以在表面上运动。在第三维中没有运动,系统的总能量是守恒的。
设置随机种子并创建本示例所需的参数集。
rng (10) rlCollaborativeTaskParams
打开Simulin金宝appk模型。
mdl =“rlCollaborativeTask”;open_system (mdl)
对于这种环境:
二维空间在X和Y方向上都以-12米到12米为界。
接触弹簧刚度为100 N/m,阻尼为0.1 N/m/s。
这些代理共享A、B和C的位置、速度和上一个时间步骤的动作值的相同观测值。
当对象C移动到圆环外时,模拟结束。
在每一个时间步骤中,智能体得到如下奖励:
在这里:
而且 分别为代理A和代理B收到的奖励。
是一个团队奖励,当对象C靠近环的边界时,两个代理都会收到这个奖励。
而且 是代理A和B根据它们与对象C的距离和从上一个时间步开始的动作的大小而受到的局部惩罚。
是物体C到圆环中心的距离。
而且 为agent A到对象C的距离,agent B到对象C的距离。
代理对机器人施加外力导致机器人运动。 而且 为上一个时间步中两个代理A和B的动作值。动作值的范围在-1到1之间。
环境
要创建多代理环境,请使用字符串数组指定代理的块路径。另外,使用单元格数组指定观察和操作规范对象。单元格数组中的规范对象的顺序必须与块路径数组中指定的顺序匹配。当创建环境时,MATLAB工作空间中存在代理时,观察和操作规范数组是可选的。有关创建多代理环境的详细信息,请参见rl金宝appSimulinkEnv
.
为环境创建I/O规范。在本例中,代理是同构的,并且具有相同的I/O规范。
观测次数%numObs = 16;%动作次数numAct = 2;%外力最大值(N)maxF = 1.0;%每个代理的I/O规格oinfo = rlNumericSpec([numObs,1]);ainfo = rlNumericSpec([numAct,1],...“UpperLimit”maxF,...“LowerLimit”, maxf);oinfo。Name =“观察”;ainfo。Name =“力量”;
创建Simulink环金宝app境接口。
BLKS = [“rlCollaborativeTask /代理”,“B rlCollaborativeTask /代理”];obsinfo = {oinfo,oinfo};actinfo = {ainfo,ainfo};env = rl金宝appSimulinkEnv(mdl,blks,obsInfos,actInfos);
为环境指定一个重置函数。复位功能resetRobots
确保机器人在每一集开始时从随机的初始位置开始。
env。ResetFcn = @(in) resetRobots(in,RA,RB,RC,boundaryR);
代理
本例使用两个具有连续动作空间的近端策略优化(PPO)代理。代理对机器人施加外力导致机器人运动。要了解更多关于PPO代理的信息,请参见近端策略优化代理.
代理收集经验,直到达到经验范围(600步)。轨迹完成后,智能体从300个经验的小批量中学习。目标函数剪辑因子0.2用于提高训练稳定性,折扣因子0.99用于鼓励长期奖励。
为本例指定代理选项。
agentOptions = rlPPOAgentOptions(...“ExperienceHorizon”, 600,...“ClipFactor”, 0.2,...“EntropyLossWeight”, 0.01,...“MiniBatchSize”, 300,...“NumEpoch”4...“AdvantageEstimateMethod”,“gae”,...“GAEFactor”, 0.95,...“SampleTime”Ts,...“DiscountFactor”, 0.99);agentOptions.ActorOptimizerOptions.LearnRate = 1e-4;agentOptions.CriticOptimizerOptions.LearnRate = 1e-4;
使用默认的代理创建语法创建代理。有关更多信息,请参阅rlPPOAgent
.
agentA = rlPPOAgent(oinfo, ainfo,...rlAgentInitializationOptions (“NumHiddenUnit”, 200), agentOptions);agentB = rlPPOAgent(oinfo, ainfo,...rlAgentInitializationOptions (“NumHiddenUnit”, 200), agentOptions);
培训
要训练多个代理,可以将代理数组传递给火车
函数。数组中代理的顺序必须与创建环境时指定的代理块路径的顺序相匹配。这样做可以确保代理对象链接到环境中相应的I/O接口。
您可以采用分散或集中的方式训练多个座席。在去中心化训练中,代理在事件期间收集自己的一组经验,并从这些经验中独立学习。集中式培训中,各座席分享收集到的经验,共同学习。轨迹完成后,各智能体之间的actor和批评家功能同步。
在配置多座席培训时,您可以创建座席组,并为每个座席组指定学习策略rlMultiAgentTrainingOptions
对象。每个智能体组可以包含唯一的智能体索引,学习策略可以是“集中”
或“去中心化”
.例如,可以使用以下命令为三个具有不同学习策略的座席组配置培训。有指数的代理[1,2]
而且(3、4)
一边代理一边集中学习4
以分散的方式学习。
opts = rlMultiAgentTrainingOptions("AgentGroups", {[1,2], 4, [3,5]}, "LearningStrategy", ["centralized","decentralized","centralized"])
有关多代理训练的更多信息,请键入帮助rlMultiAgentTrainingOptions
在MATLAB。
您可以通过使用“运行部分”按钮运行以下部分之一来执行分散或集中训练。
1.分散培训
为本例配置分散的多代理训练:
属性自动分配代理组
AgentGroups =汽车
选择。这将每个代理分配到一个单独的组中。指定
“去中心化”
学习策略。运行训练最多1000集,每集最多600个时间步。
当一个智能体连续30集的平均奖励为-10或更多时停止训练。
trainOpts = rlMultiAgentTrainingOptions(...“AgentGroups”,“汽车”,...“LearningStrategy”,“去中心化”,...“MaxEpisodes”, 1000,...“MaxStepsPerEpisode”, 600,...“ScoreAveragingWindowLength”30岁的...“StopTrainingCriteria”,“AverageReward”,...“StopTrainingValue”, -10);
培训特工使用火车
函数。根据可用的计算能力,训练可能需要几个小时才能完成。为了节省时间,加载MAT文件decentralizedAgents.mat
其中包含一组预先训练过的代理。亲自训练探员,设置doTraining
来真正的
.
doTraining = false;如果doTraining decentralizedTrainResults = train([agentA,agentB],env,trainOpts);其他的负载(“decentralizedAgents.mat”);结束
下图是去中心化训练进度的快照。由于训练过程的随机性,你可以期待不同的结果。
2.集中的训练
为本例配置集中式多代理训练:
分配两个代理(带索引)
1
而且2
)放在一组。类型中的代理索引可以做到这一点“AgentGroups”
选择。指定
“集中”
学习策略。运行训练最多1000集,每集最多600个时间步。
当一个智能体连续30集的平均奖励为-10或更多时停止训练。
trainOpts = rlMultiAgentTrainingOptions(...“AgentGroups”{[1, 2]},...“LearningStrategy”,“集中”,...“MaxEpisodes”, 1000,...“MaxStepsPerEpisode”, 600,...“ScoreAveragingWindowLength”30岁的...“StopTrainingCriteria”,“AverageReward”,...“StopTrainingValue”, -10);
培训特工使用火车
函数。根据可用的计算能力,训练可能需要几个小时才能完成。为了节省时间,加载MAT文件centralizedAgents.mat
其中包含一组预先训练过的代理。亲自训练探员,设置doTraining
来真正的
.
doTraining = false;如果doTraining centrizedtrainresults = train([agentA,agentB],env,trainOpts);其他的负载(“centralizedAgents.mat”);结束
下图为集中训练进度快照。由于训练过程的随机性,你可以期待不同的结果。
模拟
训练完成后,在环境中模拟训练过的代理。
simOptions = rlSimulationOptions(“MaxSteps”, 300);exp = sim(env,[agentA agentB],simOptions);
有关代理模拟的详细信息,请参见rlSimulationOptions
而且sim卡
.
使用现有的训练数据停止和恢复训练
这个例子展示了如何使用现有的训练数据来恢复训练Q-learning。有关这些代理的更多信息,请参见q学习的代理而且撒尔沙代理.
创建网格世界环境
对于本例,创建基本网格世界环境。
环境= rlPredefinedEnv(“BasicGridWorld”);
要指定代理的初始状态总是[2,1],请创建一个reset函数,该函数返回初始代理状态的状态号。
X0 = [1:12 15:17 19:22 24];env。ResetFcn = @() x0(randi(nummel (x0)));
固定随机生成器种子的再现性。
rng (1)
创建Q-Learning Agent
要创建Q学习代理,首先使用网格世界环境中的观察和操作规范创建Q表。设置表示的学习率为1。
qTable = rlTable(getObservationInfo(env),getActionInfo(env));qVf = rlQValueFunction(qTable,getObservationInfo(env),getActionInfo(env));
接下来,使用这个表表示创建一个q学习代理,并配置贪婪的探索。有关创建q学习代理的详细信息,请参见rlQAgent
而且rlQAgentOptions
.保持折扣因子的默认值为0.99
.
agentOpts = rlQAgentOptions;agentopt . epsilongreedyexploration . epsilon = 0.2;agentoptions . criticoptimizeroptions . learnrate = 0.2;agentopt . epsilongreedyexploration . epsilondecay = 1e-3;agentopt . epsilongreedyexploration . epsilonmin = 1e-3;agentOpts。折扣因子= 1;qAgent = rlQAgent(qVf,agentOpts);
训练Q-Learning Agent 100集
要培训代理,首先指定培训选项。有关更多信息,请参见rlTrainingOptions
.
trainOpts = rlTrainingOptions;trainOpts。MaxStepsPerEpisode = 200;trainOpts。MaxEpisodes = 1e6;trainOpts。情节=“没有”;trainOpts。Verbose = false;trainOpts。StopTrainingCriteria =“EpisodeCount”;trainOpts。StopTrainingValue = 100;trainOpts。ScoreAveragingWindowLength = 30;
训练q学习代理使用火车
函数。训练可能需要几分钟才能完成。为了在运行此示例时节省时间,请通过设置加载预训练的代理doTraining
来假
.要亲自训练特工,请设置doTraining
来真正的
.
trainingStats = train(qAgent,env,trainOpts);
显示上一集索引。
trainingStats.EpisodeIndex(结束)
Ans = 100
再训练Q-Learning Agent 200集
设置训练在第300集后停止。
trainingStats.TrainingOptions.StopTrainingValue = 300;
中存在的训练数据恢复训练trainingStats
.
trainingStats = train(qAgent,env,trainingStats);
显示上一集索引。
trainingStats.EpisodeIndex(结束)
Ans = 300
情节情节奖励。
figure() plot(trainingStats.EpisodeIndex,trainingStats.EpisodeReward)“集奖励”)包含(“EpisodeIndex”) ylabel (“EpisodeReward”)
显示最终的q值表。
qAgentFinalQ = getLearnableParameters(get批评家(qAgent));qAgentFinalQ {1}
ans =25x4单矩阵4.8373 10.0000 -1.3036 0.8020 9.2058 4.3147 11.0000 5.8501 10.0000 3.3987 4.5830 -6.4751 6.3569 6.0000 8.9971 5.4393 5.0433 5.8399 7.0067 4.1439 5.1031 8.5228 10.9936 0.1200 9.9616 8.8647 12.0000 10.0026 11.0000 8.4131 8.6974 6.0001 10.0000 6.9997 8.5523 7.1164 7.0019 8.0000 5.8196
验证Q-Learning结果
为了验证训练结果,在训练环境中对智能体进行仿真。
在运行模拟之前,可视化环境并配置可视化以维护代理状态的跟踪。
情节env (env)。ResetFcn = @() 2;env.Model.Viewer.ShowTrace = true;env.Model.Viewer.clearTrace;
类在环境中模拟代理sim卡
函数。
sim (qAgent env)
输入参数
代理
- - - - - -代理
代理对象|代理对象数组
要训练的代理,指定为强化学习代理对象,如rlACAgent
或rlDDPGAgent
,或作为这样的对象的数组。
如果env
是否创建多代理环境rl金宝appSimulinkEnv
,将代理指定为数组。数组中代理的顺序必须与用于创建的代理顺序相匹配env
.MATLAB不支持多代理训练金宝app®环境。
请注意
火车
随着训练的进行更新代理。这是可能的,因为每个代理都是句柄对象。为了保留原始的代理参数供以后使用,请将代理保存到一个mat文件中(如果将代理复制到一个新变量中,新变量也将始终指向具有更新参数的最新代理版本)。有关句柄对象的详细信息,请参见处理对象行为.
请注意
当培训结束时,代理
反映每个代理在最后一个训练集结束时的状态。最终agent所获得的奖励不一定是在训练过程中得到的最高的,因为不断的探索。为了在培训期间保存座席,可以创建rlTrainingOptions
对象,指定SaveAgentCriteria而且SaveAgentValue属性并将其传递给火车
作为一个trainOpts
论点。
有关如何创建和配置用于强化学习的代理的详细信息,请参见强化学习代理.
env
- - - - - -环境
强化学习环境对象
智能体活动的环境,指定为以下类型的强化学习环境对象之一:
预定义的MATLAB或Simulink金宝app®使用
rlPredefinedEnv
.这种环境不支持同时训练多个代理。金宝app使用函数创建的自定义MATLAB环境,如
rlFunctionEnv
或rlCreateEnvTemplate
.这种环境不支持同时训练多个代理。金宝app用于创建的自定义S金宝appimulink环境
rl金宝appSimulinkEnv
.这种环境支持同时训练多个代理。金宝app
有关创建和配置环境的更多信息,请参见:
当env
是一个Si金宝appmulink环境,调用火车
编译并模拟与环境相关的模型。
trainOpts
- - - - - -培训参数和选项
rlTrainingOptions
对象|rlMultiAgentTrainingOptions
对象
训练参数和选项,指定为rlTrainingOptions
或者一个rlMultiAgentTrainingOptions
对象。使用此实参指定如下参数和选项:
结束培训的标准
保存候选代理的标准
如何显示培训进度
并行计算的选项
prevTrainStats
- - - - - -训练集数据
rlTrainingResult
对象|的数组rlTrainingResult
对象
训练集数据,指定为:
rlTrainingResult
对象,当训练单个代理时。的数组
rlTrainingResult
训练多个代理时的对象。
用这个论点从它停止的确切位置重新开始训练。这将从之前获得的代理参数和训练结果对象的最后一个值开始训练火车
函数调用。prevTrainStats
属性作为属性之一,包含rlTrainingOptions
对象或rlMultiAgentTrainingOptions
对象,指定训练选项集。因此,要使用更新的训练选项重新启动训练,首先将训练选项更改为trainResults
使用点表示法。如果在上一个训练会话中已经达到最大集数,则必须增加最大集数。
有关rlTrainingResult
对象属性,请参见trainStats输出参数。
输出参数
trainStats
-训练集数据
rlTrainingResult
对象|的数组rlTrainingResult
对象
训练集数据,返回为:
rlTrainingResult
对象,当训练单个代理时。的数组
rlTrainingResult
训练多个代理时的对象。
属性的以下属性属于rlTrainingResult
对象:
EpisodeIndex
-剧集编号
[1, 2,…;N]
集数,作为列向量返回[1, 2,…;N]
,在那里N
是训练运行中的集数。如果你想要绘制从一集到另一集的其他数量的演变,这个向量是有用的。
EpisodeReward
-每集奖励
列向量
每一集的奖励,以长度的列向量返回N
.每个条目都包含相应章节的奖励。
EpisodeSteps
-每集的步数
列向量
每一集的步数,以长度的列向量形式返回N
.每个条目都包含相应情节中的步数。
AverageReward
-平均窗口的平均奖励
列向量
中指定的平均窗口内的平均奖励trainOpts
,作为长度的列向量返回N
.每个条目都包含相应章节结束时计算的平均奖励。
TotalAgentSteps
-总步数
列向量
智能体在训练中的总步数,作为长度的列向量返回N
.每一项包含中各项的累积和EpisodeSteps
到那时为止。
EpisodeQ0
评论家对每一集的长期奖励的估计
列向量
评论家使用当前代理和环境初始条件估计长期奖励,作为长度的列向量返回N
.每个条目都是评论家估计(问0)作为相应剧集的代理人。此字段仅用于具有批评者的代理,例如rlDDPGAgent
而且rlDQNAgent
.
SimulationInfo
-模拟过程中收集的信息
结构|的向量金宝app仿真软件。SimulationOutput
对象
在为训练而进行的模拟中收集的信息,返回为:
对于MATLAB环境中的训练,一个包含字段的结构
SimulationError
.这个字段是一个列向量,每集有一个条目。当StopOnError
选择rlTrainingOptions
是“关闭”
,每个条目包含在相应情节中发生的任何错误。对于Simulink环境中的训练金宝app,向量
金宝app仿真软件。SimulationOutput
包含在相应事件期间记录的模拟数据的对象。一个事件的记录数据包括任何信号和模型被配置为日志的状态、模拟元数据以及在相应事件期间发生的任何错误。
TrainingOptions
-培训选项设置
rlTrainingOptions
对象|rlMultiAgentTrainingOptions
对象
培训选项设置,返回为:
对于单个代理,一个
rlTrainingOptions
对象。有关更多信息,请参见rlTrainingOptions
参考页面。对于多个代理,一个
rlMultiAgentTrainingOptions
对象。有关更多信息,请参见rlMultiAgentTrainingOptions
参考页面。
提示
火车
随着训练的进行更新代理。为了保留原始的代理参数供以后使用,请将代理保存到一个mat文件中。默认情况下,调用
火车
打开强化学习插曲管理器,它可以让你可视化训练的进度。插曲管理器图显示了每一集的奖励,一个运行的平均奖励值,以及评论家的估计问0(对于有批评者的代理人)。插曲管理器还显示各种插曲和训练统计数据。若要关闭强化学习插曲管理器,请设置情节
选择trainOpts
来“没有”
.如果使用具有可视化的预定义环境,则可以使用
情节(env)
使环境形象化。如果你打电话情节(env)
在训练之前,然后在训练期间更新可视化,让您可以可视化每一集的进度。(对于自定义环境,必须实现自己的环境情节
方法。)中规定的条件,培训终止
trainOpts
感到满意。若要终止正在进行的训练,请在“强化学习事件管理器”中单击停止训练.因为火车
每集更新代理,您可以通过电话恢复培训火车(代理,env, trainOpts)
同样,在不丢失第一次调用期间学习到的训练参数的情况下火车
.在培训期间,您可以保存满足指定条件的候选代理
trainOpts
.例如,您可以保存任何集奖励超过一定值的agent,即使总体上还不满足终止训练的条件。火车
将保存的代理存储在指定文件夹中的mat文件中trainOpts
.保存的代理可能很有用,例如,允许您测试在长时间运行的培训过程中生成的候选代理。保存条件和保存位置请参见rlTrainingOptions
.
算法
一般来说,火车
执行以下迭代步骤:
初始化
代理
.每集:
重置环境。
获得初步观察结果年代0来自环境。
计算初始动作一个0=μ(年代0)。
将当前操作设置为初始操作(一个←一个0),并将当前观测值设置为初始观测值(年代←年代0)。
当情节尚未结束或结束时:
用行动保护环境一个得到下一个观测值年代和报酬r.
从经验集(年代,一个,r,年代”)。
计算下一个动作一个' =μ(年代”)。
使用下一个操作更新当前操作(一个←一个’),并将当前观测值更新为下一个观测值(年代←年代”)。
如果满足环境中定义的插曲终止条件,则中断。
若培训终止条件定义为
trainOpts
遇有,终止培训。否则,请开始下一集。
具体是如何火车
执行这些计算取决于代理和环境的配置。例如,在每集开始时重置环境可以包括随机初始状态值,如果您将环境配置为这样做的话。
扩展功能
自动平行支撑金宝app
通过使用并行计算工具箱™自动并行运行计算来加速代码。
要并行训练,请设置UseParallel
而且ParallelizationOptions
选项集中的选项trainOpts
.多代理环境不支持并行训练。金宝app有关更多信息,请参见rlTrainingOptions
.
版本历史
在R2019a中引入R2022a:火车
现在返回一个对象而不是结构
从R2022a开始,火车
返回对象或对象数组,而不是结构。对象的属性与以前版本中返回的结构的字段相匹配。因此,基于点表示法的代码以相同的方式工作。
以培训座席为例,执行如下命令:
trainStats = train(agent,env,trainOptions);
trainStats
返回为rlTrainingResult
对象。
的rlTrainingResult
对象包含先前在结构中返回的相同的训练统计信息,以及用于正确地重新创建训练场景和更新插曲管理器的数据。
你可以使用trainStats
第三个论点是另一个火车
调用,它(当使用相同的代理和环境执行时)将导致训练从它停止的确切位置恢复。
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。