Logo

Portal
  • アカウントポータル
Manual
  • はじめに
  • アカウントの作成
  • 授業作成と基本設定
  • 授業登録(履修登録)
  • オンラインプログラミング
  • 数学演習・テスト
  • オンラインチャット
  • コードの自動採点について

CES-Alpha システムの使用手引き

My course

Loading ...

はじめに

以下の動画ではCES-Alphaの基本的な機能をご紹介しています。

  • CES-Alphaの機能紹介動画(YouTube)

アカウントの作成

CES-Alphaを利用するためには、まずはアカウントの作成が必要です。
アカウント作成後、
CES-Alphaの機能がご利用いただけるようになります。

  • アカウントの作成(PDF)

授業作成と基本設定

授業の管理者は授業参加登録やレポートなどのLMS機能を利用できます。

  • 授業の作成と基本設定(PDF)
  • レポートの提出(履修者)(PDF)
  • ファイル管理とホームページの作成(PDF)
  • Moodle連携(PDF)

授業登録(履修登録)

履修者は、アカウント登録後に授業登録を行う必要があります。
その後、登録された授業におけるレポート提出、オンラインプログラミング、数学演習・テストなどの機能を使用できるようになります。

  • 授業への参加登録(PDF)

オンラインプログラミング

CES-AlphaはGCPクラウドサーバーを用いたオンラインプログラミング環境を提供しています。
ユーザーは、ブラウザから計算機サーバーを立ち上げ、Jupyter Notebook環境ですぐにプログラミングを行うことができます。
担当教員は履修者の起動している計算機サーバーにアクセスし、履修者の画面を直接確認しながら指導することができます。

  • オンラインプログラミング環境の利用(PDF)
  • オンラインプログラミングの機能紹介動画(YouTube)

数学演習・テスト

CES-Alphaでは、数式の数学的な意味を理解できる採点機能を新しく導入しています。
学生の解答において正しい数式の入力は一通りにはなりませんので、プログラムによる数学の問題の採点は数式を理解しないと正しく行うことができません。 例えば「a(x+2)」という標準解答例の場合、「ax+2a」も正しい答えです。
現在、CES-AlphaではPythonのSymPyと独自の数式処理エンジンを用いて、学生が入力した数式を解析し、問題の標準解答例と等価かどうかを判定して採点を行っています。 学生はシステム上で演習課題を提出後に、答えが正しいかどうかをすぐに確認でき、演習課題の再提出も可能です。 さらに、学生の解答状況に応じて、数式の入力チェックやヒント提示の機能も備えています。

さらに、得点分布などの統計情報を集計し、図表により可視化できます。

これにより履修者の学習状況を把握し、状況に応じた指導が可能になります。

  • 演習問題作成DEMOページ  new!
  • 数学演習・テスト(教員)(PDF)
  • 数学演習・テスト(履修者用)(PDF)
  • 数学演習・テストの機能紹介動画(YouTube)

オンラインチャット

CES-Alphaは履修者の質問にスムーズに対応できるオンラインチャット機能を備えています。
複数の教員・複数のティーチングアシスタントが複数の履修者に対する質問対応を同時に実施できるよう工夫されています。

  • オンラインチャット(履修者用)(PDF)
  • オンラインチャットの機能紹介動画(YouTube)

コードの自動採点について

コードの自動採点では、教員側が用意した解答例と学生の提出したコードを実行し、それぞれで生成された変数を比較して正誤判定を行っています。

 

Python 言語での変数の比較には、以下のアルゴリズムが使用されています。

特に、浮動小数点数の比較においては、擬似コードに使用される誤差の許容範囲 Error_Tolerance_ のデフォルト値は 1E-8 です。

 

教員は、各コード採点演習問題の設定において、以下の Python コードを解答例の先頭に記述することで、その演習問題における採点時の許容範囲をカスタマイズできます。。

GRADE_ERR_TOL  = 1E-8    # No indent 

 

自動採点のアルゴリズム

注意:以下の擬似コードの説明では、教員側の解答例によって生成された変数を answer_、学生側の解答によって生成された変数を my_answer_ と表記します。

def compare(answer_ , my_answer_):
    # Try direct equality (including bool, int, str, etc.)
    try:
        if answer_ == my_answer_:
            return True
    except Exception:
        pass
     # Type-aware fallback
    try:
        # NumPy arrays
        import numpy as np
        if isinstance(answer_, np.ndarray):
            if np.array_equal(answer_, my_answer_):
                return True
            if np.allclose(answer_, my_answer_, atol=Error_Tolerance_):
                return True
         # Floats
        elif isinstance(answer_, float):
            if abs(answer_ - my_answer_) <= Error_Tolerance_:
                return True
         # Lists
        elif isinstance(answer_, list) or isinstance(answer_, tuple):
            if len(answer_) != len(my_answer_):
                raise ValueError("List lengths differ")
            all_good = True
            for a, b in zip(answer_, my_answer_):
                if isinstance(a, float):
                    if abs(a - b) > Error_Tolerance_:
                        all_good = False
                        break
                elif a != b:
                    all_good = False
                    break
            if all_good:
                return True
         # Dicts
        elif isinstance(answer_, dict) and isinstance(my_answer_, dict):
            if answer_.keys() != my_answer_.keys():
                raise ValueError("Dict keys differ")
            all_good = True
            for k in answer_:
                a, b = answer_[k], my_answer_[k]
                if isinstance(a, float):
                    if abs(a - b) > Error_Tolerance_:
                        all_good = False
                        break
                elif a != b:
                    all_good = False
                    break
            if all_good:
                return True
    except Exception:
        pass
        
    return False