-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSimulation.m
More file actions
102 lines (84 loc) · 2.61 KB
/
Copy pathSimulation.m
File metadata and controls
102 lines (84 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
%Aaron Rosenberg
%ECE 607
%Final Project
%DDPG Simulation
clc;clear;close all;
%% Initialize Environment
rng(0)
greenhouse = greenhouseEnv;
ObservationInfo = getObservationInfo(greenhouse);
ActionInfo = getActionInfo(greenhouse);
%% Initialize Critic
% Number of neurons
L = 100;
% Main path
mainPath = [
featureInputLayer(prod(ObservationInfo.Dimension),Name="obsInLyr")
fullyConnectedLayer(L)
reluLayer
fullyConnectedLayer(L)
additionLayer(2,Name="add")
reluLayer
fullyConnectedLayer(L)
reluLayer
fullyConnectedLayer(1,Name="QValLyr")
];
% Action path
actionPath = [
featureInputLayer(prod(ActionInfo.Dimension),Name="actInLyr")
fullyConnectedLayer(L,Name="actOutLyr")
];
% Assemble layergraph object
criticNet = layerGraph(mainPath);
criticNet = addLayers(criticNet,actionPath);
criticNet = connectLayers(criticNet,"actOutLyr","add/in2");
criticNet = dlnetwork(criticNet);
summary(criticNet)
%figure
%plot(criticNet)
critic = rlQValueFunction(criticNet,ObservationInfo,ActionInfo,...
ObservationInputNames="obsInLyr",ActionInputNames="actInLyr");
%% Initialize Actor
actorNet = [
featureInputLayer(prod(ObservationInfo.Dimension))
fullyConnectedLayer(L)
reluLayer
fullyConnectedLayer(L)
reluLayer
fullyConnectedLayer(L)
reluLayer
fullyConnectedLayer(3)
sigmoidLayer
];
actorNet = dlnetwork(actorNet);
summary(actorNet)
actor = rlContinuousDeterministicActor(actorNet,ObservationInfo,ActionInfo);
%% Agent and Agent Options
criticOptions = rlOptimizerOptions( ...
LearnRate=1e-3, ...
GradientThreshold=1, ...
L2RegularizationFactor=1e-4);
actorOptions = rlOptimizerOptions( ...
LearnRate=1e-4, ...
GradientThreshold=1, ...
L2RegularizationFactor=1e-4);
agentOptions = rlDDPGAgentOptions(...
SampleTime=greenhouse.Ts,...
ActorOptimizerOptions=actorOptions,...
CriticOptimizerOptions=criticOptions,...
ExperienceBufferLength=1e6);
agentOptions.NoiseOptions.Variance = [0.3;0.3;0.3];
agentOptions.NoiseOptions.VarianceDecayRate = 1e-5;
ControlSystem = rlDDPGAgent(actor,critic,agentOptions);
%% Training
trainOpts = rlTrainingOptions;
trainOpts.MaxEpisodes = 500;
trainOpts.MaxStepsPerEpisode = 3600;
trainOpts.ScoreAveragingWindowLength = 25;
trainOpts.StopTrainingCriteria = "EpisodeCount";
trainOpts.StopTrainingValue = 150;
trainOpts.SaveAgentCriteria = "EpisodeCount";
trainOpts.SaveAgentValue = 150;
trainingInfo = train(ControlSystem,greenhouse,trainOpts)
simOpts = rlSimulationOptions;
simOpts.MaxSteps = 3600;