make it based on softmax function