isight5 二次开发之 Application (2) 之 Calc组件

上次主要研究了一个优化任务的执行及结果的获取,见isight5.0 二次开发之 Application (1)。这次看看如何添加和设置各种组件,从零开始建立整个任务。


此次建立的模型很简单,一个优化组件加一个计算组件。


isight5 二次开发之 Application (2) 之 Calc组件_第1张图片

添加组件可以参照软件自带的例子,主要的问题是如何建立变量的映射和设置组件参数。


1 变量映射


变量映射的目的是为了实现组件之间参数值的传递,建立输入输出关系。这里采用 DtUtils 中的方法。


DtUtils.mapAddedParameterList


2 设置组件参数


对于优化组件来说,需要设定优化变量和优化目标,可以通过 OptimizationPlan 的方法进行设定。


对于计算组件,没有特定的类来实现参数设置,采用 ComponentAPI 的方式来设定。


下面是全部代码:


//=========================================================================

    /**
     * Method createMyOptModelFromScratch
     *
     * @throws Exception
     */
    //=========================================================================
    private static void createMyOptModelFromScratch()
        throws Exception {
        DtModelManager mgr = DtModelManager.createEmptyModel();
        mgr.getModelProperties().setModelName("My Optimization Model");

        //
        MetaModel rootMM = MetaModelManager.instance().lookupMetaModel(EsiTypes.OPTIMIZATION_COMPONENT);
        DtComponent myTask = DtModelManager.createComponent(rootMM, "MyOptimization");
        mgr.setRootComponent(myTask);

        // Now add a calculator to the task
        MetaModel calcMM = MetaModelManager.instance().lookupMetaModel("com.engineous.component.Calculator");
        DtComponent calc = DtModelManager.createComponent(calcMM, "My Calc");
        myTask.addComponent(calc);

        //
        DtControlFlow cf1 = DtModelManager.createControlFlow(null, calc);
        DtControlFlow cf2 = DtModelManager.createControlFlow(calc, null);

        myTask.addControlFlow(cf1);
        myTask.addControlFlow(cf2);

        //
        DtScalarVariable var = DtModelManager.createScalarVariable("x", EsiTypes.REAL, Variable.ROLE_PARAMETER,
                Variable.MODE_INPUT, null, null);

        var.getValueObj().setValue(100);
        calc.addParameter(var);

        DtUtils.copyParameters(calc, myTask);

        DtScalarVariable var2 = DtModelManager.createScalarVariable("y", EsiTypes.REAL, Variable.ROLE_PARAMETER,
                Variable.MODE_OUTPUT, null, null);

        calc.addParameter(var2);

        //
        OptimizationPlan optPlan = DesignDriverFactory.createOptPlan(myTask);
        DesignVariable dv = optPlan.addDesignVariable("x");
        Objective obj = optPlan.addObjective("y", Objective.MINIMIZE);
        optPlan.store(myTask);

        //
        ComponentAPI calculatorAPI = calc.getAPI();
        String calc1 = "y=x^2";
        calculatorAPI.set("expression", calc1);
        calculatorAPI.apply();

        //
        List<DtVariable> varToMap = new ArrayList<DtVariable>();
        varToMap.add(var);
        DtUtils.mapAddedParameterList(varToMap);

        //Save the model
        // To verify what you have created, go load this into the Isight Gateway.

        String newName = "MyOptModel.zmf";
        OutputStream savedFile = new FileOutputStream(newName);
        mgr.saveZippedModel(savedFile);
    }




你可能感兴趣的:(exception,优化,null,application,optimization)