火车
语法
描述
列车内的一个或多个强化学习代理指定的环境中,使用默认训练选项。虽然trainStats
=火车(env
,代理
)代理
是一个输入参数,在每一个训练集,火车
更新参数中指定的每个代理代理
最大化其预期的长期回报的环境。这是可能的因为每个代理是一个处理对象。培训结束时,代理
反映了每个代理的状态结束时最后的训练集。
请注意
离线训练off-policy代理使用现有的数据,使用trainFromData
。
执行同样的训练与前面的语法。trainStats
=火车(代理
,env
)
火车trainStats
=火车(___,trainOpts
)代理
在env
使用培训对象的选择trainOpts
。使用培训选项来指定参数如终止的标准培训,保存代理时,集训练的最大数量,每集的最大数量的步骤。使用这个语法的任何输入参数后以前的语法。
恢复训练的最后值代理中包含的参数和训练结果trainStats
=火车(代理
,env
,prevTrainStats
)prevTrainStats
在前面的函数调用火车
。
训练数据使用日志trainStats
=火车(___记录器=lgr
)FileLogger
或MonitorLogger
lgr
对象。
例子
训练强化学习代理
火车代理的配置火车PG代理Cart-Pole平衡系统例如,在相应的环境中。环境的观察是一个向量包含一辆小车的位置和速度,以及角杆的位置和速度。与两种可能的行动是一个标量元素(-10年或10牛的力应用于车)。
加载文件包含环境和PG代理已经配置。
负载RLTrainExample.mat
指定一些参数使用培训rlTrainingOptions
。这些参数包括最大数量的训练集,每集最大的步骤和条件终止培训。对于这个示例,使用最多2000集,每集500步。指导培训停止当奖励前五集平均达到500。创建一个默认的选项设置和使用点符号改变一些参数值。
trainOpts = rlTrainingOptions;trainOpts。MaxEpisodes = 2000;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的代理。预定义的cart-pole环境中使用这个示例中,您可以使用情节
生成一个cart-pole系统的可视化。
情节(env)
当您运行这个示例中,该可视化和强化学习集经理更新每个训练集。把它们并排在屏幕上观察进展,和培训代理。(这个计算可以20分钟或更多)。
trainingInfo =火车(代理,env, trainOpts);
事件管理器显示培训成功达到终止条件的奖励500平均前五集。在每一个训练集,火车
更新代理
在上一次的参数。在培训结束时,您可以模拟训练的环境代理对其性能进行评估。环境图更新在模拟期间那样训练。
simOptions = rlSimulationOptions (MaxSteps = 500);经验= sim (env,代理,simOptions);
在培训期间,火车
保存到磁盘的任何代理满足指定的条件trainOps.SaveAgentCritera
和trainOpts.SaveAgentValue
。为了测试这些代理的性能,您可以加载数据从数据文件在您指定的文件夹在使用trainOpts.SaveAgentDirectory
和模拟环境与代理。
训练多个代理执行协作任务
这个例子展示了如何设置一个多智能训练仿真软件®环境。万博1manbetx在这个例子中,您训练两个代理协作执行的任务移动一个对象。
环境在这个例子中是一个无摩擦的二维表面含有元素由圆圈表示。目标对象所代表的C是蓝色的圆的半径2米,和机器人(红色)和B(绿色)是由更小的圆的半径1米。机器人试图移动对象C外圆环的半径8 m运用力量的碰撞。所有的元素在环境质量和遵守牛顿运动定律。此外,元素之间的接触力和环境边界建模为春季和质量阻尼系统。表面的元素可以通过外部的应用程序应用部队在X和Y方向。没有在第三维度和运动系统的总能量是守恒的。
设置随机种子和这个例子所需创建的一组参数。
rng (10) rlCollaborativeTaskParams
打开仿真软件模型。万博1manbetx
mdl =“rlCollaborativeTask”;open_system (mdl)
对于这个环境:
二维空间是有界从-12米到12米在X和Y方向。
接触弹簧刚度和阻尼值100 N / m和0.1 N / m / s,分别。
代理共享相同的观测位置,速度的A, B, C和动作值从最后一次一步。
仿真对象C圆环外移动时终止。
在每个时间步,代理获得以下奖励:
在这里:
和 由代理收到的奖励A和B,分别。
是一个团队奖励,即接收到代理对象C靠近边界的戒指。
和 A和B是本地处罚收到代理根据距离C和对象的大小从最后一次行动步骤。
是对象的距离C从环的中心。
和 代理之间的距离和对象B和C和代理对象C,分别。
代理申请外部力量导致运动的机器人。 和 行动的价值观是A和B两个代理从最后一次一步。动作值的范围是1 - 1。
环境
多智能体环境,创建一个指定代理的块路径使用字符串数组。同时,指定使用细胞观察和行动规范对象数组。单元阵列中的规范对象的顺序必须匹配块路径数组中指定的顺序。当代理可用MATLAB工作区环境创建的时候,观察和行动规范数组是可选的。关于多智能体环境创造的更多信息,请参阅rl万博1manbetxSimulinkEnv
。
创造的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 =“力量”;
创建界面的仿真软件环境万博1manbetx。
黑色= [“rlCollaborativeTask /代理”,“B rlCollaborativeTask /代理”];obsInfos = {oinfo, oinfo};actInfos = {ainfo, ainfo};env = rl万博1manbetxSimulinkEnv (mdl,黑色,obsInfos actInfos);
指定一个重置功能环境。重置功能resetRobots
确保了机器人从随机初始位置在每集的开始。
env。ResetFcn = @(在)resetRobots (RA, RB、RC boundaryR);
代理
这个示例使用两个近端政策优化(PPO)代理与持续的行动空间。代理申请外部力量导致运动的机器人。更多地了解PPO代理,看看近端政策优化(PPO)代理。
代理收集经验到经验地平线(600步)。轨迹完成后,代理从mini-batches 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 = 1的军医;agentOptions.CriticOptimizerOptions。LearnRate = 1的军医;
使用默认代理创建语法创建代理。更多信息见rlPPOAgent
。
agentA = rlPPOAgent (oinfo ainfo,…rlAgentInitializationOptions (NumHiddenUnit = 200), agentOptions);agentB = rlPPOAgent (oinfo ainfo,…rlAgentInitializationOptions (NumHiddenUnit = 200), agentOptions);
培训
训练多个代理,你可以通过代理的一个数组火车
函数。代理的顺序数组中指定的代理块路径必须匹配订单在创造环境。这样做确保代理对象是与他们的环境中适当的I / O接口。
你可以训练多个代理分散或集中的方式。分散培训,代理收集自己的经验在情节和独立学习的经验。在集中培训、代理一起分享收集到的经验和从错误中学习。演员和评论家函数之间同步轨道后的代理完成。
配置一个多代理培训,您可以创建代理组,每组指定一个学习策略rlMultiAgentTrainingOptions
对象。每个代理组可能包含独特的代理指标,和学习策略“集中”
或“去中心化”
。例如,您可以使用以下命令来配置培训三个代理组用不同的学习策略。的代理指标[1,2]
和(3、4)
学习在一个集中的方式代理4
以分散的方式学习。
选择= rlMultiAgentTrainingOptions (AgentGroups = {[1, 2] 4 (3、5)}, LearningStrategy =[“集中式”、“分散”,“集中”))
在多代理培训的更多信息,类型帮助rlMultiAgentTrainingOptions
在MATLAB。
您可以执行分散或集中培训通过运行以下部分之一使用Run按钮。
1。分散培训
配置分散的多代理培训这个例子:
自动分配代理组使用
AgentGroups =汽车
选择。这个分配每个代理在一个单独的组。指定
“去中心化”
学习策略。运行培训最多1000集,每集持续最多600的时间步骤。
阻止一个代理的培训当其平均奖励30多个连续集是-10或更多。
trainOpts = rlMultiAgentTrainingOptions (…AgentGroups =“汽车”,…LearningStrategy =“去中心化”,…MaxEpisodes = 1000,…MaxStepsPerEpisode = 600,…ScoreAveragingWindowLength = 30,…StopTrainingCriteria =“AverageReward”,…StopTrainingValue = -10);
培训人员使用火车
函数。培训可以需要几个小时才能完成取决于可用的计算能力。为了节省时间,文件加载垫decentralizedAgents.mat
它包含一组pretrained代理。培训代理商自己,集doTraining
来真正的
。
doTraining = false;如果doTraining decentralizedTrainResults =火车([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);
培训人员使用火车
函数。培训可以需要几个小时才能完成取决于可用的计算能力。为了节省时间,文件加载垫centralizedAgents.mat
它包含一组pretrained代理。培训代理商自己,集doTraining
来真正的
。
doTraining = false;如果doTraining centralizedTrainResults =火车([agentA agentB], env, trainOpts);其他的负载(“centralizedAgents.mat”);结束
下面的图显示了一个快照的集中培训的进展。你可以期待不同的结果由于随机性的培训过程。
模拟
一旦训练完成后,与环境模拟训练有素的特工。
simOptions = rlSimulationOptions (MaxSteps = 300);经验= sim (env, [agentA agentB], simOptions);
代理模拟更多的信息,请参阅rlSimulationOptions
和sim卡
。
停止使用现有训练数据和恢复训练
这个例子展示了如何使用现有的训练数据训练q学习的恢复训练。这些代理的更多信息,请参阅q学习的代理和撒尔沙代理。
创建网格世界环境
对于这个示例,创建基本网格的世界环境。
env = rlPredefinedEnv (“BasicGridWorld”);
指定代理的初始状态总是(2,1),创建一个复位函数,它返回初始代理状态的状态数。
x0 =[1:12十五17 1:18 24];env。ResetFcn = @ () x0 (randi(元素个数(x0)));
解决随机发生器再现性的种子。
rng (1)
创建q学习的代理
创建一个Q学习代理,首先创建一个Q表使用观察和行动规范从电网世界环境。设置的学习速率表示为1。
qTable = rlTable (getObservationInfo (env) getActionInfo (env));qVf = rlQValueFunction (qTable getObservationInfo (env) getActionInfo (env));
接下来,创建一个q学习代理和配置使用此表表示epsilon-greedy探索。创建q学习代理的更多信息,请参阅rlQAgent
和rlQAgentOptions
。保持默认值的折现系数0.99
。
agentOpts = rlQAgentOptions;agentOpts.EpsilonGreedyExploration。ε= 0.2;agentOpts.CriticOptimizerOptions。LearnRate = 0.2;agentOpts.EpsilonGreedyExploration。EpsilonDecay = 1 e - 3;agentOpts.EpsilonGreedyExploration。EpsilonMin = 1 e - 3;agentOpts。DiscountFactor = 1;qAgent = rlQAgent (qVf agentOpts);
火车q学习代理100集
培训代理商,首先指定培训选项。有关更多信息,请参见rlTrainingOptions
。
trainOpts = rlTrainingOptions;trainOpts。MaxStepsPerEpisode = 200;trainOpts。MaxEpisodes = 1 e6;trainOpts。情节=“没有”;trainOpts。Verbose = false;trainOpts。StopTrainingCriteria =“EpisodeCount”;trainOpts。StopTrainingValue = 100;trainOpts。ScoreAveragingWindowLength = 30;
火车q学习代理使用火车
函数。培训可能需要几分钟才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining
来假
。训练自己代理,集doTraining
来真正的
。
env, trainingStats =火车(qAgent trainOpts);
显示最后一集的指数。
trainingStats.EpisodeIndex(结束)
ans = 100
火车q学习代理200多集
设置训练集300后停止。
trainingStats.TrainingOptions。StopTrainingValue = 300;
恢复使用中存在的训练数据训练trainingStats
。
env, trainingStats =火车(qAgent trainingStats);
显示最后一集的指数。
trainingStats.EpisodeIndex(结束)
ans = 300
情节插曲奖励。
图()图(trainingStats.EpisodeIndex trainingStats.EpisodeReward)标题(“集奖励”)包含(“EpisodeIndex”)ylabel (“EpisodeReward”)
显示最后的核反应能量表。
qAgentFinalQ = getLearnableParameters (getCritic (qAgent));qAgentFinalQ {1}
ans =25 x4单一矩阵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 5.8122 8.5523 7.1164 7.0019 8.0000 5.8196⋮
验证q学习的结果
验证培训效果,培训环境中模拟剂。
在运行模拟之前,可视化环境和配置代理的可视化保持跟踪状态。
情节env (env)。ResetFcn = @ () 2;env.Model.Viewer。ShowTrace = true;env.Model.Viewer.clearTrace;
模拟环境中的代理使用sim卡
函数。
sim (qAgent env)
输入参数
代理
- - - - - -代理
代理对象|代理对象的数组
代理培训,指定为强化学习代理对象,如rlACAgent
或rlDDPGAgent
,或者是一个这样的对象数组。
如果env
是一个多代理环境创建rl万博1manbetxSimulinkEnv
作为数组,指定代理。数组中代理的顺序必须与代理命令用于创建env
。多代理培训不支持MATLAB万博1manbetx®环境。
请注意
火车
更新代理商培训的进展。这是可能的因为每个代理是一个处理对象。保留原来的代理参数供以后使用,将代理保存到MAT-file(如果你代理复制到一个新的变量,新变量也将总是指向最近的代理版本更新参数)。关于处理对象的更多信息,请参阅处理对象的行为。
请注意
培训结束时,代理
反映了每个代理的状态结束时最后的训练集。回报最终获得的代理不一定是最高的实现在培训过程中,由于持续的探索。期间保存代理培训,创建一个rlTrainingOptions
对象指定SaveAgentCriteria和SaveAgentValue并将其传递给属性火车
作为一个trainOpts
论点。
为更多的信息关于如何创建和配置代理强化学习,明白了强化学习代理。
env
- - - - - -环境
强化学习环境对象
环境代理行为,指定为以下类型之一,强化学习环境对象:
一个预定义的MATLAB仿真软件万博1manbetx®所创造的环境中使用
rlPredefinedEnv
。这种环境不支持同时多个代理培训。万博1manbetx一个定制的MATLAB环境下创建等功能
rlFunctionEnv
或rlCreateEnvTemplate
。这种环境不支持同时多个代理培训。万博1manbetx自定义创建使用仿真万博1manbetx软件环境
rl万博1manbetxSimulinkEnv
。这种环境下多个代理同时支持培训。万博1manbetx
有关创建和配置环境的更多信息,请参见:
当env
是一个仿真万博1manbetx软件环境,调用火车
编译和模拟模型与环境有关。
trainOpts
- - - - - -训练参数和选项
rlTrainingOptions
对象|rlMultiAgentTrainingOptions
对象
训练参数和选项,指定为一个rlTrainingOptions
或者一个rlMultiAgentTrainingOptions
对象。使用这个参数来指定参数和选项如:
结束培训标准
储蓄的候选人标准代理
如何显示培训进展吗
选择并行计算
有关详细信息,请参见rlTrainingOptions
和rlMultiAgentTrainingOptions
。
prevTrainStats
- - - - - -训练数据集
rlTrainingResult
对象|的数组rlTrainingResult
对象
训练集数据,指定为一个:
rlTrainingResult
对象,当训练一个代理。的数组
rlTrainingResult
当训练多个代理对象。
使用这个参数恢复训练从它的精确的点停止。这将启动培训从代理的最后值参数和训练后获得之前的结果对象火车
函数调用。prevTrainStats
包含,作为它的一个属性,rlTrainingOptions
对象或rlMultiAgentTrainingOptions
对象指定培训选项集。因此,重新启动培训与更新选项,首先改变训练选项trainResults
使用点符号。如果事件的最大数量已经达到了在前面的训练,你必须增加事件的最大数量。
为详细信息rlTrainingResult
对象属性,请参阅trainStats输出参数。
lgr
- - - - - -日志记录器对象
FileLogger
对象|MonitorLogger
对象
日志记录器对象,指定的作为FileLogger
或作为一个MonitorLogger
对象。关于强化日志记录器对象的更多信息,请参阅rlDataLogger
。
输出参数
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
——模拟期间收集的信息
结构|向量万博1manbetxSimulink.SimulationOutput
对象
模拟过程中收集的信息进行训练,返回:
培训在MATLAB环境中,包含字段的结构
SimulationError
。这个领域是一个列向量,每集一个条目。当StopOnError
选择rlTrainingOptions
是“关闭”
,每个条目包含相应的事件期间发生的任何错误。培训在仿真软件环境中,一个向量的万博1manbetx
万博1manbetxSimulink.SimulationOutput
对象包含仿真数据记录在相应的事件。记录数据,包括任何一集信号模型配置日志和状态,仿真元数据和相应的事件期间发生的任何错误。
TrainingOptions
——培训选项设置
rlTrainingOptions
对象|rlMultiAgentTrainingOptions
对象
培训选项设置,返回:
一个代理,一个
rlTrainingOptions
对象。有关更多信息,请参见rlTrainingOptions
。多个代理的
rlMultiAgentTrainingOptions
对象。有关更多信息,请参见rlMultiAgentTrainingOptions
。
提示
火车
更新代理商培训的进展。保留原来的代理参数供以后使用,保存MAT-file代理。默认情况下,调用
火车
打开了强化学习集管理器,它允许您可视化培训的进展。这一事件经理情节展示了每一集的奖励,运行的平均回报价值,评论家估计问0(代理的批评)。事件管理器还显示各种集和训练数据。关掉强化学习事件管理器,设置情节
选择trainOpts
来“没有”
。如果你使用一个预定义的环境的可视化,可以使用
情节(env)
可视化环境。如果你叫情节(env)
在训练之前,那么可视化更新培训期间允许您可视化每集的进步。(自定义的环境中,你必须实现自己的情节
方法。)培训中指定的条件时终止
trainOpts
感到满意。终止培训进展,在强化学习事件管理器中,单击停止训练。因为火车
在每一集更新代理,你可以通过调用恢复训练火车(代理,env, trainOpts)
再一次,没有失去训练参数学习在第一次调用火车
。在培训期间,您可以节省候选人符合条件指定代理
trainOpts
。例如,您可以保存任何代理的集奖励超过一定值,即使总体条件终止培训还不满意。火车
商店保存代理MAT-file在您所指定的文件夹trainOpts
。保存代理可能是有用的,例如,允许您测试候选人代理长期训练过程中生成的。关于保存条件和保存位置的详细信息,请参见rlTrainingOptions
。
算法
一般来说,火车
执行以下迭代步骤:
初始化
代理
。每集:
重置环境。
获得最初的观察年代0从环境中。
计算初始行动一个0=μ(年代0)。
设置当前行动最初的行动(一个←一个0)和设置当前观测到初始观察(年代←年代0)。
虽然这不是完成或终止:
一步的环境行动一个获取下一个观察年代”和奖励r。
从经验中学习集(年代,一个,r,年代”)。
计算下一个动作一个' =μ(年代”)。
更新当前的行动和未来行动(一个←一个”)和更新当前与未来观察(观察年代←年代”)。
打破如果事件环境中定义满足终止条件。
如果定义的训练终止条件
trainOpts
满足终止培训。否则,开始下一个事件。
多的细节火车
代理的执行这些计算取决于您的配置和环境。例如,重置环境在每集的开始可以包括随机的初始状态值,如果您配置您的环境。
扩展功能
自动并行支持万博1manbetx
加速代码通过自动运行并行计算使用并行计算工具箱™。
并行训练,设置UseParallel
和ParallelizationOptions
选项的选项设置trainOpts
。多智能体环境不支持并行训练。万博1manbetx有关更多信息,请参见rlTrainingOptions
。
版本历史
介绍了R2019aR2022a:火车
现在返回一个对象,而不是一个结构
从R2022a开始,火车
返回一个对象或一个对象数组,而不是结构。对象的属性匹配的字段结构中返回以前的版本。因此,基于点符号代码以同样的方式工作。
例如,如果你训练一个代理使用以下命令:
trainStats =火车(代理,env, trainOptions);
trainStats
作为一个返回rlTrainingResult
对象。
的rlTrainingResult
对象包含同样的训练之前统计结构中返回数据正确再现训练场景和更新事件管理器。
您可以使用trainStats
作为另一个第三个参数火车
电话,(当执行相同的代理和环境)会导致训练恢复它的精确的点停止。
MATLABコマンド
次のMATLABコマンドに対応するリンクがクリックされました。
コマンドをMATLABコマンドウィンドウに入力して実行してくださ了对いweb这类ブラウザーはMATLABコマンドをサポートしていません。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。