You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.8 KiB
118 lines
3.8 KiB
//==============================================================================
|
|
//
|
|
// Copyright (c) 2002-
|
|
// Authors:
|
|
// * Vojtech Forejt <vojtech.forejt@cs.ox.ac.uk> (University of Oxford)
|
|
//
|
|
//------------------------------------------------------------------------------
|
|
//
|
|
// This file is part of PRISM.
|
|
//
|
|
// PRISM is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation; either version 2 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// PRISM is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with PRISM; if not, write to the Free Software Foundation,
|
|
// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
//
|
|
//==============================================================================
|
|
|
|
package sparse;
|
|
|
|
import jdd.JDDNode;
|
|
import jdd.JDDVars;
|
|
import odd.ODDNode;
|
|
import prism.PrismException;
|
|
|
|
/**
|
|
* A wrapper class around a native sparse representation of an MDP.
|
|
*/
|
|
public class NDSparseMatrix
|
|
{
|
|
// JNI methods
|
|
|
|
private static native int PS_NDGetActionIndex(long ptr, int s, int i);
|
|
|
|
private static native long PS_BuildNDSparseMatrix(long trans, long odd, long rv, int nrv, long cv, int ncv, long ndv, int nndv);
|
|
|
|
private static native long PS_BuildSubNDSparseMatrix(long trans, long odd, long rv, int nrv, long cv, int ncv, long ndv, int nndv, long rewards);
|
|
|
|
private static native void PS_AddActionsToNDSparseMatrix(long trans, long trans_actions, long odd, long rv, int nrv, long cv, int ncv, long ndv, int nndv, long ndsm);
|
|
|
|
private static native void PS_DeleteNDSparseMatrix(long ptr_matrix);
|
|
|
|
static {
|
|
try {
|
|
System.loadLibrary("prismsparse");
|
|
} catch (UnsatisfiedLinkError e) {
|
|
System.out.println(e);
|
|
System.exit(1);
|
|
}
|
|
}
|
|
|
|
/** Pointer to C++ data structure. **/
|
|
private long ptr;
|
|
|
|
/**
|
|
* Constructor (from a C++ pointer).
|
|
*/
|
|
private NDSparseMatrix(long ptr)
|
|
{
|
|
this.ptr = ptr;
|
|
}
|
|
|
|
/**
|
|
* Returns the pointer to the native C++ data structure.
|
|
*/
|
|
public long getPtr()
|
|
{
|
|
return ptr;
|
|
}
|
|
|
|
/**
|
|
* Get the index of the action label (if any) for choice {@code i} of state {@code s}.
|
|
*/
|
|
public int getActionIndex(int s, int i)
|
|
{
|
|
return PS_NDGetActionIndex(ptr, s, i);
|
|
}
|
|
|
|
/**
|
|
* Deletes the matrix.
|
|
*/
|
|
public void delete()
|
|
{
|
|
PS_DeleteNDSparseMatrix(this.ptr);
|
|
}
|
|
|
|
// Static methods to construct NDSparseMatrix objects
|
|
|
|
public static NDSparseMatrix BuildNDSparseMatrix(JDDNode trans, ODDNode odd, JDDVars rows, JDDVars cols, JDDVars nondet) throws PrismException
|
|
{
|
|
long ptr = PS_BuildNDSparseMatrix(trans.ptr(), odd.ptr(), rows.array(), rows.n(), cols.array(), cols.n(), nondet.array(), nondet.n());
|
|
if (ptr == 0)
|
|
throw new PrismException(PrismSparse.getErrorMessage());
|
|
return new NDSparseMatrix(ptr);
|
|
}
|
|
|
|
public static NDSparseMatrix BuildSubNDSparseMatrix(JDDNode trans, ODDNode odd, JDDVars rows, JDDVars cols, JDDVars nondet, JDDNode rewards)
|
|
throws PrismException
|
|
{
|
|
long ptr = PS_BuildSubNDSparseMatrix(trans.ptr(), odd.ptr(), rows.array(), rows.n(), cols.array(), cols.n(), nondet.array(), nondet.n(), rewards.ptr());
|
|
if (ptr == 0)
|
|
throw new PrismException(PrismSparse.getErrorMessage());
|
|
return new NDSparseMatrix(ptr);
|
|
}
|
|
|
|
public static void AddActionsToNDSparseMatrix(JDDNode trans, JDDNode transActions, ODDNode odd, JDDVars rows, JDDVars cols, JDDVars nondet, NDSparseMatrix ndsm) throws PrismException
|
|
{
|
|
PS_AddActionsToNDSparseMatrix(trans.ptr(), transActions.ptr(), odd.ptr(), rows.array(), rows.n(), cols.array(), cols.n(), nondet.array(), nondet.n(), ndsm.getPtr());
|
|
}
|
|
}
|