Tuesday, June 1, 2010

Segmentation fault with c++ vector

Ever been in a situation where you got a seg. fault when you tried to push_back a pointer into the vector? What's more, you have a useless log file with no clues whatsoever. I had the same issue when i was working on an assignment with deadline in 2 hours. After whacking my head for 1-2 hours, I finally found a way to resolve the issue.

I was working on "simple ecosystem" project. The code where new fishes are created and added to the ecosystem seg. faulted. Take a look, I cut down unnecessary things to keep this example simple.
for (vector::iterator it = vecPossiblePositions.begin(); it!=vecPossiblePositions.end(); ++it)
{
//create a new fish..
Fish *f = new Fish();
f->setPosition(it->getX(), it->getY());

//This method does a push_back
//operation on some vector
ecosystem->addEcosystemObject(f);
}
If i comment out ecosystem->addEcosystemObject(f) line, then it runs without seg. fault. Apparently, the line Fish *f = new Fish() was causing the problem. So here's what i did.
Fish *f = NULL;
for (vector::iterator it = vecPossiblePositions.begin(); it!=vecPossiblePositions.end(); ++it)
{
//create a new fish..
f = new Fish();
f->setPosition(it->getX(), it->getY());

//This method does a push_back
//operation on some vector
ecosystem->addEcosystemObject(f);
}
and that fixed the problem! I have no idea why it worked. So, today's lesson of the day is "Keep the damn ptr declarations outside loops"

Enter teeki chawal

Got bored of same old food? Try this recipe..I found out about it from a friend of mine and made a few modifications of my own.

Here's what you need:
  1. Cooked rice
  2. Oil (obviously)
  3. Mirchi powder, jeera, salt, chopped onions, semi boiled and cut potato (one will do)
  4. Crushed tomatoes, c, carrots, beans, green peas, corn
Here's how you proceed:
  1. Heat a pan with lots of oil..
  2. Put jeera (one handful, needs to be more)
  3. Put onions and fry em' all at med flame
  4. Once onions are semi fried, put capsicum, potatoes and cook for like 7 mins
  5. Put remaining veggies and cook for another 7 mins.
  6. Add mirchi powder, and any other spices you fancy (Dhaniya powder, Hing, Garam masala will also do)
  7. Let it cook for another 5 mins..(At any point, if you notice that the veggies are burning, add a little bit of crushed tomato puree)
  8. Add 40% of the crushed tomatoes from the can.
  9. Cook for 10 mins.
  10. Now, taste the mixture, it should be slightly spicier, if not, add more spices. Also, at this point you should notice oil separating from the mixture
  11. Add cooked rice (cold one preferably), and stir for 3-5 mins..
That's it..enjoy your meal :)

Thursday, May 27, 2010

Measuring the Observer Expectancy Effect

If you are performing an experiment in which you tell the participant what you are expecting, then this biases the result due to placebo effect. This is the observer expectancy effect. How can you measure this? Intuitively, the solution seems simple. Do the experiment twice, in the first, tell the participant about the expected outcomes and in the second don't tell him anything about the experiment. Then, you measure the difference in outcomes to calculate the variance introduced due to observer expectancy effect. But, is that accurate?

Lets consider a simple example. Suppose you are to create stress relief program. How would you measure if stress is relived or not? If you tell your subjects that they were participating in stress relief program, placebo effect will come into account and you cannot truly determine if the reduction in stress is actually due to the program you created. If you don't tell anyone about anything, including researchers and participants, you can get rid of the observer expectancy effect. This is the Double Blind trial strategy.

Coming back to the original question, if you do the experiment twice, one with the expectancy effect and another using double blind strategy and consider the difference in performance, do we then have the measure of observer expectancy?

The answer is NO because in both the experiments the state of the participant is different. To be accurate, you'll have to conduct both the experiments in which the researchers, participants and in fact the entire universe is in the same state, i.e., do both the experiments simultaneously, which obviously doesn't work out.

How else can we go about this problem? First we start by formalizing the problem, making it concise. For simplicity, let us consider a single participant. In a given experiment, let the state of the participant be Sp (could involve factors such as personality etc..) and the state of everything else be Se (state of the environment, ideally the entire universe, but a local region would suffice). Therefore, the state of an experiment can be defined by the Tuple (Sp, Se).

Now, perform N experiments with blind trial strategy, each represented by different tuples (S1p, S1e) ... (Snp, Sne) You can now build a regression model to determine the the outcome of the experiment as a function of Se and Sp, after collecting data from sufficiently large number of experiments.

Now we can apply the strategy discussed before. We perform experiment with double blind trial with parameters (S1e, S1p). The second experiment (with expectancy effect) with parameters (S2e, S2p). We can now extrapolate the outcomes of first experiment if parameters S2e and S2p were used instead of S1e and S1p. Since, both the experiments are now virtually conducted simultaneously, we can now determine the observer expectancy effect by computing the difference in outcome.

More accurate the regression model, better is the accuracy of the observer expectancy. With few obvious modifications, one can also build a model to estimate observer expectancy as a function of experiment, Se and Sp.

On a second thought, who gives a damn? If the stress relief program works, be it due to expectancy, that's all we really care about.

Sunday, April 25, 2010

How to solve puzzles

Interested in solving single player puzzles such as "Sudoku", "Rubik's Cube", "Missionaries and Cannibals", "Traveling Salesman Problem"? Try out my newest project, JSimpleAI. For a detailed description, check my blog post on How to solve puzzles

How to solve puzzles

I recently came across this puzzle called as frog leap. Its an interesting puzzle, so, I sat down trying to solve it. I quickly lost my patience, and being a computer science student, decided to write an AI to solve it. It just took me 20 minutes to write an AI that solves this puzzle! boy am i glad not to have wasted my time thinking about the puzzle.

I decided to go ahead an start a project that allows you to solve single player puzzles such as "Sudoku", "Rubik's cube", "Missionaries and Cannibals problem", the notorious euclidean traveling salesman problem etc.. Its called JSimpleAI and is open sourced @ java.net. I currently implemented TSP and Frog Leap solvers as demos. I'll be more than happy if any of you are interested in implementing suduko, rubiks cube etc..For the algorithmically oriented, you can implement SMA* algorithm. Think about the number of people that can benefit from this!

I am very proud of the project logo that i chose:

It shows the search landscape and the local optima's. Cool isn't it!

In case you're wondering about the solution for frog leap, there are two of them. Here is a screenshot from JSimpleAI. It took 0 secs to solve it! Why dont you go ahead and try writing a code to solve missionaries and cannibals problem? It'll be fun

Monday, April 12, 2010

Monday, January 11, 2010

The irony..

A Japanese fisher man loves to fish. He sells just enough fish to pay for his bills; and enjoys a happy family life since his fishing does not take up all his time. A business man comes along, shakes his head and suggests that the fisher man buys a boat, hires men and fishes in deeper waters. That way, he advises, the fisherman can catch more fish... See More, make more money, and in turn buy more boats and hire even more men!

The fisher man asks, "for what reason would I do such a thing?" The businessman smiles and says that once he has established a thriving business, he has then the option to sell it so that he can live a more leisurely life; perhaps spend more time with his family and hobbies. The fisherman smiles and says – "I already have that now…why would I waste time walking in circles only to come back to where I am now?"