ok here is my code:
 
main.C
--------------
#include "tdagent.H"

#include

"simple_env.H"

#include

<iostream.h>

#include

<vector>

int

main()

{

simple_env *env;

tdagent *agent;

boost::numeric::ublas::vector<

float> aaa;

aaa.resize(3);

std::vector<

float> uu;

env->create();

int flag=1;

while(flag)

{

boost::numeric::ublas::vector<

float> v1(3);

v1=env->get_state();

boost::numeric::ublas::vector<

float> v2(3);

v2=env->get_final_state();

if(v1(0)==v2(0) && v1(1)==v2(1) && v1(2)==v2(2))

flag=0;

uu=agent->find_next_action();

env->preform(uu[0]);

}

return 1;

}

simple_env.H

-----------------------------

#ifndef

SIMPLE_ENV_H

 

#define

SIMPLE_ENV_H

#include <math.h>

#include <boost/numeric/ublas/matrix.hpp>

#include <boost/numeric/ublas/vector.hpp>

#include <boost/numeric/ublas/io.hpp>

#include <boost/numeric/ublas/matrix_proxy.hpp>

#include <boost/numeric/ublas/vector_proxy.hpp>

#define PI 3.1415926535897932384626433832795

class simple_env

{

 

public:

simple_env();

~simple_env();

void create();

float preform(float u);

float get_reward();

boost::numeric::ublas::vector<float> get_state();

boost::numeric::ublas::vector<float> get_previous_state();

boost::numeric::ublas::vector<float> get_final_state();

boost::numeric::ublas::vector<float> get_cov();

int get_actions_num();

float get_min_reward();

float get_max_reward();

 

private:

float sigmoid(float u);

float reward;

boost::numeric::ublas::vector<float> state;

boost::numeric::ublas::vector<float> prev_state;

boost::numeric::ublas::vector<float> final_state;

boost::numeric::ublas::vector<float> cov;

};

#endif

 

simple_env.C

---------------------------------

include

"simple_env.H"

 

namespace

ublas = boost::numeric::ublas;

 

using

namespace boost::numeric::ublas;

simple_env::simple_env()

{

cov(3);

}

simple_env::~simple_env()

{

}

 

void

simple_env::create()

{

cov.resize(3);

for (unsigned int i = 0; i < 3; ++ i)

cov (i) = 1;

vector<

float> initial_state(3);

for (unsigned int i = 0; i < initial_state.size (); ++ i)

initial_state (i) = 0;

vector<

float> final_state(3);

for (unsigned int i = 0; i < final_state.size (); ++ i)

final_state (i) = 5;

 

state=initial_state;

return;

}

 

at main.C when I write:

boost::numeric::ublas::vector<float> aaa;

aaa.resize(3);

there is no problem.

but when the program enters env->create()

and reaches, cov.resize(3), it failes with a segmentation fault.

 

Thanks,

Dvir

 



 
On 6/6/06, Ian McCulloch <ianmcc@physik.rwth-aachen.de> wrote:
dvir schirman wrote:

>  I see I didnt make myself clear.
>
> I wrote:
> boost::numeric::ublas::vector a;
>
> at my header file.
>
> and wrote:
> a.resize(3);
>
> at my implementation file.
> So, as I see it, it should work this way.
>

Threads like this are practically useless without a full example (but as
short as possible!) that demonstrates the problem.

Can you post the exact code that you compiled (after trimming out anything
that is unnecessary), and the steps we need to follow to reproduce the
problem.

Cheers,
Ian


_______________________________________________
ublas mailing list
ublas@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/ublas