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
|
#
# Copyright 2007-2019 by the individuals mentioned in the source code history
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# http://openmx.ssri.psu.edu/issue/2014/05/memory-leak-when-running-ram-model-constraint
library(OpenMx)
#mxOption(NULL, "Default optimizer", 'SLSQP')
data(demoOneFactor)
manifests <- names(demoOneFactor)
latents <- c("G")
factorModelPath <- mxModel(
"OneFactorPath",
type="RAM",
manifestVars = manifests,
latentVars = latents,
mxPath(from=latents, to=manifests,
labels=paste("l",1:5,sep="")),
mxPath(from=manifests, arrows=2),
mxPath(from=latents, arrows=2,
free=FALSE, values=1.0),
mxData(cov(demoOneFactor), type="cov",
numObs=500),
mxAlgebra(S[6,6],name="GV"),
mxConstraint(GV-1==0,name="pointless"),
mxConstraint(GV>0,name="morePointless"))
#factorModelPath <- mxOption(factorModelPath,"Checkpoint Directory","C:/Work/OpenMx_dev/")
#factorModelPath <- mxOption(factorModelPath,"Checkpoint Units","evaluations")
#factorModelPath <- mxOption(factorModelPath,"Checkpoint Count",1)
factorModelPath <- mxOption(factorModelPath,"Calculate Hessian","No")
factorModelPath <- mxOption(factorModelPath,"Standard Errors","No")
factorFit <- mxRun(factorModelPath, silent = TRUE)
omxCheckEquals(factorFit$output$status$code, 0)
if (mxOption(NULL, "Default optimizer") != 'NPSOL') {
# Any constraints that show up here by mistake will have a zero gradient.
omxCheckTrue(all(factorFit$output$gradient != 0))
}
omxCheckCloseEnough(sqrt(sum(factorFit$output$gradient^2)), 0, .021)
if (mxOption(NULL, "Default optimizer") != 'CSOLNP') { # TODO
broken <- mxModel(factorModelPath, remove=TRUE, names(factorModelPath$constraints))
broken <- mxModel(broken, mxConstraint(GV>2, "infeasible"));
broken <- omxCheckWarning(mxRun(broken, silent=TRUE),
"In model 'OneFactorPath' Optimizer returned a non-zero status code 3. The nonlinear constraints and bounds could not be satisfied. The problem may have no feasible solution.")
omxCheckEquals(broken$output$status$code, 3)
} else{
plan <- omxDefaultComputePlan()
plan$steps$GD <- mxComputeNelderMead(ineqConstraintMthd="eqMthd",eqConstraintMthd="l1p")
plan$steps <- list(GD=plan$steps$GD)
broken <- mxModel(factorModelPath, remove=TRUE, names(factorModelPath$constraints))
broken <- mxModel(broken, mxConstraint(GV>2, "infeasible"), plan);
broken <- omxCheckWarning(
mxRun(broken, silent=TRUE),
"In model 'OneFactorPath' Optimizer returned a non-zero status code 3. The nonlinear constraints and bounds could not be satisfied. The problem may have no feasible solution.")
omxCheckEquals(broken$output$status$code, 3)
}
|