Random state in machine learning models I am confused about random_state parameter in some algorithms like AdaboostClasifier, DecisionTree and so on

Here is an example 

from sklearn.model_selection import *
from sklearn.ensemble import AdaBoostClassifier
param_grid = {
    'learning_rate':[0.001, 0.10, 0.1, 1],

             'n_estimators':range(50, 400, 50)
             }


abc = AdaBoostClassifier(random_state=123)

# run grid search
grid_abc=GridSearchCV(abc, param_grid, scoring = 'accuracy')
grid_abc.fit(X_train, y_train)
#The best hyper parameters set
print("Best Hyper Parameters:\n",grid_abc.best_params_)
print("training accuracy:\n",grid_abc.best_score_)
prediction=grid_abc.best_estimator_.predict(X_test)
#importing the metrics module
from sklearn import metrics
#evaluation(Accuracy)
print("Accuracy:",metrics.accuracy_score(prediction,y_test))
#evaluation(Confusion Matrix)
print("Confusion Matrix:\n",metrics.confusion_matrix(prediction,y_test))
print("\t\tclassification report")
print("-" * 52)
print(metrics.classification_report(prediction,y_test))


The accuracy results is 0.9420289855072463

But when i change the random_state value to 0 
I got another accuracy results 0.8584070796460177

How can i fix the result and be sure of the final results.It is ricky by the way Do i have to set random_state value of the train_test split as the classifier or no?
If i understand correctly you want to make sure your results will remain constant and won't change?
Or in other words, are you trying to make sure your results are reproducible?  

If so, this FAQ in the scikit-learn site has exactly what you are looking for.

I'll also repeat what it says here:
An algorithm might have multiple points that introduce randomness to the process and thus introduce randomness to the result.  

One method to make sure your result are constant is to set every possible random_state available in the functions that you use.
The risk in this method is that you might miss some of the places that uses a seed.

The second method, which they also describe in the FAQ, is to set a global seed once.
scikit-learn will use it for all it's random processes.
So setting a global seed like this

import numpy as np
np.random.seed(42)


will make your results constant and reproducible.