java调用Lingo_Problem:如何传递Lingo的矩阵?

//网格布局
panel.setLayout(new GridLayout(4,4))//指定4行4列
panel.add(new) JButton("1"));
panel.add(new) JButton("2"));//从第一行第一列开始,然后第一行第二列。排满后将从下一行开始排列。
//需要修正

而对于Lingo中矩阵传参到java中,因为相关函数

lng.LSsetPointerLng()

是不能以矩阵为参数的,所以不能直接引用。不过,虽然我不懂其中原理,有个解决方法是将矩阵转化为数组。比如,我的Demo1中可以将矩阵A[ 6 ] [ 8 ] 定义为B[48],原本的矩阵索引规则和按顺序排列是一样的。比如,我想取原本A矩阵的A[2] [5],也就是现在取B矩阵的B[17]。

以我的lng模型为例:
在这里插入图片描述

我将运输单价设为固定值,x(运输量)设为将被传递的参数。

建立参数
  private void Solve()//运算:赋值
    {

        int nErr;
        Double d1=0.;
        double dSumW[] = new double[6];//库存合计
        double dSumV[] = new double [8];//客户需求合计
        //double dOnDuty[] = new double [6];
        double dx[]=new double[48];//x矩阵
        double dObj[] = new double [1];//不能传递矩阵;那么只能改成数组了?
        double dStatus[] = new double [1];

        System.out.println("\nSolving...");

        // get the staffing requirements
        for ( int i=0; i<8; i++)
        {
            String s = SumV[i].getText();//需求量赋输入值
            try {
                dSumV[ i] = d1.valueOf( s);
            }
            catch ( Exception e)
            {
                dSumV[ i] = 0.;
            }
        }
        for ( int i=0; i<6; i++)
        {
            String s = SumW[i].getText();//库存赋输入值
            try {
                dSumW[ i] = d1.valueOf( s);
            }
            catch ( Exception e)
            {
                dSumW[ i] = 0.;
            }
        }

        // clear output fields
        for ( int i=0; i<6; i++)//其它先赋空值
        {
        	V1[i].setText( " ");
            V2[i].setText( " ");
            V3[i].setText( " ");
            V4[i].setText( " ");
            V5[i].setText( " ");
            V6[i].setText( " ");
            V7[i].setText( " ");
            V8[i].setText( " ");
        }
        jtfTotal.setText( " ");
传参
 nErr = lng.LSsetPointerLng( pnLngEnv, dx, nPointersNow);//矩阵
        if ( nErr != lng.LSERR_NO_ERROR_LNG )
        {
            System.out.println( "***LSsetPointerLng() error***: " + nErr);
            return;
        }
赋值
    	for( int i=0;i<6;i++) {
            Double d = (double) Math.round(dx[i*8]);
            Integer n = d.intValue();
            V1[i].setText( n.toString());
        	}

以上应该写一个列表的,不然很冗余。。。有时间再优化吧。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值